Android异步任务-NullPointerException

Android异步任务-NullPointerException,android,android-asynctask,Android,Android Asynctask,我正在构建一个应用程序,它需要连接到Web服务器上的PHP API,才能从mySQL数据库获取用户凭据。登录后,API将返回一个JSON对象 我遵循了一个在线教程,它在主线程上构建了所有内容,所以我尝试执行异步任务。然而,我不能让它工作,我一直得到一个NullPointerException。该应用程序花了大约5分钟尝试连接到我的WAMP服务器,然后就关闭了。连接到服务器以模拟恶劣的网络条件是否需要那么长的时间 代码如下: private class ProcessLogin exten

我正在构建一个应用程序,它需要连接到Web服务器上的PHP API,才能从mySQL数据库获取用户凭据。登录后,API将返回一个JSON对象

我遵循了一个在线教程,它在主线程上构建了所有内容,所以我尝试执行异步任务。然而,我不能让它工作,我一直得到一个NullPointerException。该应用程序花了大约5分钟尝试连接到我的WAMP服务器,然后就关闭了。连接到服务器以模拟恶劣的网络条件是否需要那么长的时间

代码如下:

    private class ProcessLogin extends AsyncTask<Void, String, JSONObject> {
    @Override
    protected JSONObject doInBackground(Void... urls) {

      inputEmail = (EditText) findViewById(R.id.loginEmail);
      inputPassword = (EditText) findViewById(R.id.loginPassword);
      btnLogin = (Button) findViewById(R.id.btnLogin);
      btnLinkToRegister = (Button) findViewById(R.id.btnLinkToRegisterScreen);
      loginErrorMsg = (TextView) findViewById(R.id.login_error);

      String email = inputEmail.getText().toString();
      String password = inputPassword.getText().toString();

      publishProgress("Attempting to authenticate");

      JSONObject json = userFunction.loginUser(email, password);

       return json;
     }

    @Override
    protected void onPostExecute(JSONObject json) {

        publishProgress("Response received");

        try {
            if (json.getString(KEY_SUCCESS) != null) {
                publishProgress("correct username/password");
            }
            else {
                publishProgress("Incorrect username/password");
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /* (non-Javadoc)
     * @see android.os.AsyncTask#onProgressUpdate(Progress[])
     */
    @Override
    protected void onProgressUpdate(String... values) {
     super.onProgressUpdate(values);
        // Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
        loginErrorMsg = (TextView) findViewById(R.id.login_error);
        loginErrorMsg.setText(values[0]);
     }
  }

   // Login button Click Event
   public void beginLogin(View view) {
     new ProcessLogin().execute();
   }
我刚刚开始使用Android SDK进行编码,因此如果错误非常明显,我向您道歉,并感谢您的指点


谢谢

堆栈跟踪告诉我们,LoginActivity.java的第75行有错误:

在 com.example.onepass.LoginActivity$ProcessLogin.onPostExecute(LoginActivity.java:75

由于您没有提供行号,我盲目猜测您传递给onPostExecute()的json变量仅为
null
。由于您假设它总是有效的(在99%的情况下,这是错误的假设),因此您尝试在
null
ed对象上调用getString(),从而得到NPE

解决方法是在使用之前检查
json
是否不为null,这始终是一个好习惯

08-29 20:19:50.462: E/AndroidRuntime(1287): FATAL EXCEPTION: main
08-29 20:19:50.462: E/AndroidRuntime(1287): java.lang.NullPointerException
08-29 20:19:50.462: E/AndroidRuntime(1287):     at             com.example.onepass.LoginActivity$ProcessLogin.onPostExecute(LoginActivity.java:75)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at com.example.onepass.LoginActivity$ProcessLogin.onPostExecute(LoginActivity.java:1)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at android.os.AsyncTask.finish(AsyncTask.java:631)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at android.os.Looper.loop(Looper.java:137)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at android.app.ActivityThread.main(ActivityThread.java:4745)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at java.lang.reflect.Method.invokeNative(Native Method)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at java.lang.reflect.Method.invoke(Method.java:511)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-29 20:19:50.462: E/AndroidRuntime(1287):     at dalvik.system.NativeStart.main(Native Method)