Visualización de valores nulos después de que los primeros usuarios inicien sesión en android
Tengo 3 fragmentos dentro de una aplicación y en uno de ellos se muestra el nombre de los usuarios de la base de datos SQLite. Lo que sucede es cuando registro un nuevo usuario y inicio de sesión por primera vez con él, dentro de la vista de texto donde el nombre de los usuarios supongo que aparecen, muestra el valor NULL, pero cuando me desconecto y vuelva a iniciar sesión con el mismo usuario, el nombre aparece como debería.
Después de registrar al usuario, todos los datos se insertan dentro de una base de datos, he comprobado.
- Excepción "tabla ... no tiene columna nombrada ..."
- Acceso a una base de datos .sqlite descargada determinada en el almacenamiento externo desde una aplicación de Android
- copia sqlite db al dispositivo android falla
- Android SQLiteOpenHelper - clase diferente para cada tabla?
- Cómo establecer una columna como indexador único en Sqlite
Cualquier idea que puede causar este problema? Voy a añadir algún código a petición, ya que no tengo idea de qué parte del código, fragmentos o archivos java podría causar esto ..
EDITADO
He añadido algún código para ayudar a resolver este problema.
Función de inicio de sesión dentro de la pantalla principal (una vez que se lance la aplicación):
private void checkLogin(final String email, final String password) { // Tag used to cancel the request String tag_string_req = "req_login"; pDialog.setMessage("Logging in ..."); showDialog(); StringRequest strReq = new StringRequest(Request.Method.POST, AppConfig.URL_LOGIN, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, "Login Response: " + response.toString()); hideDialog(); try { JSONObject jObj = new JSONObject(response); boolean error = jObj.getBoolean("error"); // Check for error node in json if (!error) { // user successfully logged in // Create login session session.setLogin(true); // Now store the user in SQLite String uid = jObj.getString("uid"); JSONObject user = jObj.getJSONObject("user"); String name = user.getString("name"); String email = user.getString("email"); String created_at = user.getString("created_at"); // Inserting row in users table db.addUser(name, email, uid, created_at); // Launch main activity Intent intent = new Intent(Main.this, Logged.class); startActivity(intent); finish(); } else { error_msg.setVisibility(View.VISIBLE); String msg = jObj.getString("error_msg"); error_msg.setText(msg); } } catch (JSONException e) { // JSON error e.printStackTrace(); Toast.makeText(getApplicationContext(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Login Error: " + error.getMessage()); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); hideDialog(); } }) { @Override protected Map<String, String> getParams() { // Posting parameters to login url Map<String, String> params = new HashMap<String, String>(); params.put("email", email); params.put("password", password); return params; } }; // Adding request to request queue AppController.getInstance().addToRequestQueue(strReq, tag_string_req); }
OnViewCreated func dentro del fragmento en el que debe aparecer el nombre del usuario:
@Override public void onViewCreated(View view, Bundle savedInstanceState){ profileName = (TextView) getActivity().findViewById(R.id.profileName); // SqLite database handler db = new SQLiteHandler(getActivity().getApplicationContext()); // session manager session = new SessionManager(getActivity().getApplicationContext()); if (!session.isLoggedIn()) { logoutUser(); } // Fetching user details from SQLite HashMap<String, String> user = db.getUserDetails(); String name = user.get("name"); // Displaying the user details on the screen profileName.setText(name); }
Función de función de registro:
public void onResponse(String response) { Log.d(TAG, "Register Response: " + response.toString()); hideDialog(); try { JSONObject jObj = new JSONObject(response); boolean error = jObj.getBoolean("error"); if (!error) { // User successfully stored in MySQL // Now store the user in sqlite String uid = jObj.getString("uid"); JSONObject user = jObj.getJSONObject("user"); String name = user.getString("name"); String email = user.getString("email"); String created_at = user.getString("created_at"); // Inserting row in users table db.addUser(name, email, uid, created_at); // Launch login activity Intent intent = new Intent( Register.this, Main.class); startActivity(intent); finish(); } else { // Error occurred in registration. Get the error // message error_msg.setVisibility(View.VISIBLE); String msg = jObj.getString("error_msg"); error_msg.setText(msg); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Registration Error: " + error.getMessage()); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); hideDialog(); } }) {
- SQLiteConstraintException lanzada al intentar insertar
- Ordenar los datos de la base de datos y mostrarlos en la vista de lista
- GreenDao freemaker.jar está ausente
- SQLite - No se pudo abrir el archivo de base de datos
- SQLiteDatabase.insertOrThrow no se lanza pero no se insertan datos
- Uso de la palabra clave IN en android sqlite
- ¿Cómo crear un widget de Android con opciones?
- ¿Cómo determinas si una .sqlite o .sqback está dañada en Java?
Me las arreglé para solucionar este problema a mí mismo .. El problema no estaba en los archivos java sino en los archivos php enviando a java por alguna razón ..
En php función he utilizado:
$stmt->bind_result($id, $unique_id, $name, $email, $encrypted_password, $salt, $created_at, $updated_at); $user = $stmt->fetch();
Pero luego cambió a
$user = $stmt->get_result()->fetch_assoc();
Y eso arregló el problema ..
- Mezcla de cordova y actividades nativas en Android
- Lenguaje basado en JVM sin tiempo de ejecución de lenguaje