2017-02-17 1 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); 

?> 

로그 캣

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) 

나는 몇 일 동안 고민하고있다. 누구든지 나를 도울 수 있다면 기꺼이 감사하겠습니다 :). 안드로이드 웹 사이트 튜토리얼에서 백 옵션을 구현했습니다.

자습서 : 난 당신이 이미 설명을 생각 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 문과 함께 catch 할 수 있지만 장기적으로 SharedPreferences를 사용해야합니다. 옳은? –

관련 문제