2017-02-17 10 views
-1

ユーザーがログインしてログアウトできる場所にアプリケーションを作成しようとしています。
ログインすると、(データベースから)電子メールと名前を表示するアクティビティが表示されます。戻るボタンは私のアプリケーションがクラッシュします(残念ながら、Frienday'sは停止しました)。

最近、navbar backオプションが追加されました。ユーザーがナビゲーションバーに移動してページ(about、settingsなど)を選択すると、そのアクティビティに移動します。アクティビティ(LoginSuccess.java)にログインするために戻るボタンが押された場合、アプリケーションはクラッシュし、「残念ながらFriendayは実行を停止しました」と表示されます。

これをデバッグしようとしましたが、LoginSuccess.javaのNullPointerExceptionが発生しています。私はLoginSuccess.javaファイル内の項目を削除して、ユーザーの名前と電子メールを表示しようとしました。これらを削除すると、戻るボタンが正常に動作します。 (データベース用)

LoginSuccess.javaファイル

TextView name, email; 

protected void onCreate(Bundle savedInstanceState) { 
    ... 
    name = (TextView) findViewById(R.id.name); 
    email = (TextView) findViewById(R.id.name); 
    Bundle bundle = getIntent().getExtras(); 
    name.setText(bundle.getString("name")); 
    email.setText("Email: " + bundle.getString("email")); 
} 

login.phpファイル

<?php 
    require "init.php"; 

    $user_name = $_POST["user_name"]; 
    $password = $_POST["password"]; 

    $sql = "SELECT name,email FROM user_info WHERE user_name LIKE '".$user_name."' AND password LIKE '".$password."';"; 

    $result = mysqli_query($con, $sql); 
    $response = array(); 

    # Check if user already exists. 
    if (mysqli_num_rows($result) > 0) 
    { 
     $row = mysqli_fetch_row($result); 
     $name = $row[0]; 
     $email = $row[1]; 
     $code = "login_success"; 
     array_push($response, array ("code" => $code, "name" => $name, "email" => $email)); 
     echo json_encode($response); 
    } 
    else 
    { 
     $code = "login_failed"; 
     $message = "User not found... Please try again!"; 
     array_push($response, array("code" => $code, "message" => $message)); 
     echo json_encode($response); 
    } 

    mysqli_close($con); 

?> 

Logcat

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.goril.friendays, PID: 32166 
       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.goril.friendays/com.goril.friendays.LoginSuccess}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) 
        at android.app.ActivityThread.access$1100(ActivityThread.java:222) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:158) 
        at android.app.ActivityThread.main(ActivityThread.java:7237) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference 
        at com.goril.friendays.LoginSuccess.onCreate(LoginSuccess.java:25) 
        at android.app.Activity.performCreate(Activity.java:6876) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3207) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350)  
        at android.app.ActivityThread.access$1100(ActivityThread.java:222)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:158)  
        at android.app.ActivityThread.main(ActivityThread.java:7237)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

は、私は数日間、これで苦労してきました。誰かが私を助けることができれば私はそれを喜んで感謝する:)。私はAndroidのウェブサイトのチュートリアルからバックオプションを実装しました。

チュートリアル: https://developer.android.com/training/implementing-navigation/ancestral.html

答えて

0

私はあなたがすでにそこに説明があると思う、 がそれを読み取ろう:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference 

バンドルがnullで、あなたはnullオブジェクトの文字列を取得しようとしています。 nullをチェックする必要があります。

+0

のようなものをキャッチすることができます。しかし、私はLoginSuccess.javaに示したものを削除すると、それが正常に動作します: –

+0

oをそれはnullを返した場合、私はどうなるのか?ユーザーに電子メール/名前をどのように提示するのですか? –

1

戻るを押すと、そのアクティビティを開始した前のアクティビティのgetIntent()が存在しないため、nullになります。

あなたはそう

Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    name.setText(bundle.getString("name")); 
    email.setText("Email: " + bundle.getString("email")); 
} 
+0

どうすればこれを変更できますか?私はAndroid Devの初心者です。 –

+0

あなたはおそらくSharedPreferences内にログインデータを保存すべきです。例えば。 http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/ –

+0

一時的に、私はif文でこのエラーを捕まえることができますが、私は長期的にはSharedPreferencesを使うべきです正しい? –

関連する問題