2017-08-17 10 views
0

私はuser loginの画面を持つアプリで作業しています。 サインインボタンをクリックすると、アプリがクラッシュします。として、私はアンドロイドアプリの開発にログイン画面のタイプのアプリケーションで構成された新しいです。エラーを修正することはできません。エラーを見て、それを修正するのを助けてください。 LoginActivity.javaファイル取付:ログイン時にアプリがクラッシュする

public class LoginActivity1 extends Activity implements OnClickListener{ 
    private EditText user, pass; 
    private Button bLogin; 
// Progress Dialog 
    private ProgressDialog pDialog; 
// JSON parser class 
    JSONParser jsonParser = new JSONParser(); 
    private static final String LOGIN_URL = "http://13.228.8.241/phonegap/api/login.php"; 
    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_MESSAGE = "message"; 
    @Override protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); setContentView(R.layout.activity_login1); 
     user = (EditText)findViewById(R.id.username); 
     pass = (EditText)findViewById(R.id.password); 
     bLogin = (Button)findViewById(R.id.signin); 
     bLogin.setOnClickListener(this); 
    } 
    @Override public void onClick(View v) { 
     String username= user.getText().toString(); 
     String password=pass.getText().toString(); 
      switch (v.getId()) { 
       case R.id.signin: 
        new AttemptLogin().execute(username,password); 
       case.default: break; 
      } 
    } 
    class AttemptLogin extends AsyncTask<String, String, String> { 
     /** * Before starting background thread Show Progress Dialog * */ 
     boolean failure = false; 
     @Override protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(LoginActivity1.this); 
      pDialog.setMessage("Attempting for login..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 
     @Override protected String doInBackground(String... args) { 
      int success; 
      String username = args[0]; 
      String password = args[1]; 
      try { List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("username", username)); 
       params.add(new BasicNameValuePair("password", password)); 
       Log.d("request!", "starting"); 
       JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL, "POST", params); 
       Log.d("Login attempt", json.toString()); 
       success = json.getInt(TAG_SUCCESS); 
       if (success == 1) { 
        Log.d("Successfully Login!", json.toString()); 
        Intent i = new Intent(LoginActivity1.this,ContentSecond.class); 
        startActivity(i); 
        finish(); 
        return json.getString(TAG_MESSAGE); 
       } 
       else{ 
        return json.getString(TAG_MESSAGE); 
       } 
      } 
      catch (JSONException e) { 
       e.printStackTrace(); 
      } return null; 
     } 

     protected void onPostExecute(String message) { 
      pDialog.dismiss(); 
      if (message != null){ 
       Toast.makeText(LoginActivity1.this, message, Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
} 

logcatことである:

致命的な例外:AsyncTask#1 プロセス:com.adani.animon.adani、PID:8678 java.lang.RuntimeException。実行中にエラーが発生しました doInBackground() android.os.AsyncTask $ 3.done(AsyncTask.java:309) at java.util.con (FutureTask.java:242) android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:234) でjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) java.util.concurrent.ThreadPoolExecutor $ Worker.runで(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) 原因:java.lang.NullPointerException:仮想メソッド のメソッド 'java.lを呼び出しようとしました com.adani.animon.adani.LoginActivity1 $ AttemptLogin.doInBackground(LoginActivity1.java:76)のヌル オブジェクト参照 上ang.String org.json.JSONObject.toString()」 com.adani.animonで.adani.LoginActivity1 $ AttemptLogin.doInBackground(LoginActivity1.java:53) android.os.AsyncTask $ 2.call(AsyncTask.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:237) android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) で java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588) java.lang.Thread.run(Thread.java:818) 08-17 14:58:23.089 8678-8842/com .adani.animon.adani D/libEGL:eglTerminate EGLDisplay = 0xe0362834 08-17 14:58:23.089 8678-8678/com.adani.animon.adani D/ViewRootImpl:#3 mView = null 08-17 14:58 :23.099 8678-8678/com.adani.animon.adani E/WindowManager:android.view.WindowLeaked:Activity com.adani.animon.adani.LoginActivity1がウィンドウをリークしました com.android.internal.policy.PhoneWindow $ DecorView { c367582 VE ..... R ...... D 0,0-668,232}元々ここに追加されました android.view.ViewRootImpl(ViewRootImpl.java:599)android.app.Dialog.showでandroid.view.WindowManagerImpl.addView(WindowManagerImpl.java:109) でandroid.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:326) で(Dialog.java:505) com.adani.animon.adani.LoginActivity1 $ AttemptLogin。 com.adani.animon.adaniでandroid.os.AsyncTask.executeでandroid.os.AsyncTask.executeOnExecutor(AsyncTask.java:604) でonPreExecute(LoginActivity1.java:62) (AsyncTask.java:551) .LoginActivity1.onClick(LoginActivity1.java:45) android.view.View.performClick(View.java:5714) at android.widget.TextView.performClick(TextView.java:10926) android.view.View $ PerformClick.run(View.java:22589) とandroid.os.Handler.handleCallback(Handler.java:739) (android.os.Handler.dispatchMessage(Handler.java:95)) at androi d.os.Looper.loop(Looper.java:148) android.app.ActivityThread.main(ActivityThread.java:7325) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com。 android.internal.os.ZygoteInit $ MethodAndArgsCaller.run com.android.internal.os.ZygoteInit.mainで(ZygoteInit.java:1230) (ZygoteInit.java:1120)

+0

doInBackground()メソッドにエラーがあります。アプリはヌルオブジェクトのためにクラッシュしています。ブレークポイントでコードをデバッグしようとします。 –

+0

あなたの懸念の兄弟のおかげで、私はデバッグではあまりよくありません。私はこれを解決するために多くのコードを試しましたが失敗しました。 –

+0

エラーがどこにあるかを知るには、デバッグが必要です。検索SOまたはGoogleのデバッグについて –

答えて

0

あなたのJSONレスポンスがnull

メッセージの発言:原因:java.lang.NullPointerException:仮想メソッド 'java.lang.String org.json.JSONObject.toString()'を呼び出しようとしていますヌルオブジェクト参照

"json"という名前の変数にアクセスする前にヌルチェックを追加する必要があります。

+0

ありがとうが、変数にアクセスする前にnullチェックを追加する方法はありますか? –

+0

実行前に 'if(json!= null)'と書く必要があります。 'success = json.getInt(TAG_SUCCESS);' –

+0

いいえ。しかし、変数 'success'が初期化されていても初期化されていない可能性があるため、 'if(success == 1)'行にエラーが表示されます。 –

関連する問題