2015-11-12 11 views
9

アプリ内に3つの断片があり、そのうちの1つにSQLiteデータベースのユーザー名が表示されます。新しいユーザーを登録して初めてログインすると、ユーザー名が表示されると思われるtextviewの中にNULL値が表示されますが、同じユーザーでログアウトして再度ログインすると名前が表示されます。最初のユーザーがログインした後にヌル値を表示しました

ユーザーを登録すると、すべてのデータがデータベース内に挿入され、チェックされます。

この問題の原因は何ですか?私は、コード、断片またはJavaファイルの一部がこれを引き起こす可能性があります見当がつかないように私は、リクエストに応じていくつかのコードを追加します。..

をEDITED

私はこの問題を解決するのに役立ついくつかのコードを追加しました。メイン画面内の

ログイン機能(一度アプリを起動):

@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); 

} 

登録機能部:

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(); 
     } 
    }) { 
ユーザー名がdiplayedれるべきフラグメント内部

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

+0

...

$stmt->bind_result($id, $unique_id, $name, $email, $encrypted_password, $salt, $created_at, $updated_at); $user = $stmt->fetch(); 

をしかし、その後

$user = $stmt->get_result()->fetch_assoc(); 

に変更し、それが問題を修正あなたがあります変数がnullではないと確信していますか?それを割り当ててから表示しますか?おそらくいくつかのコードを外しても助けになるでしょう。 – 3kings

+0

問題はいつでも発生する可能性があります。データベースはユーザ名、コントローラ/ DAO層を返さず、正しい名前をクライアントまたはクライアントコードに返さないため、正しく処理されないため、表示されません。理想的には、 – hagrawal

+0

ユーザーが登録されると、彼の詳細はmysqlとsqliteデータベース内に追加されます。すべてのデータが挿入されますが、表示されるnullはありません。 2番目の – AlwaysConfused

答えて

6

私はこの問題を自分で並べ替えることができました。問題はJavaファイルではなくp PHPの関数の中で私が使用し..何らかの理由でJavaへ

を送信HPファイル:

関連する問題