mySQL データベースからユーザー資格情報を取得するために Web サーバー上の PHP API に接続する必要があるアプリを構築しています。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();
}
ログ猫のエラーは次のとおりです。
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)
私は Android SDK でコーディングを始めたばかりなので、エラーが本当に明らかな場合は、お詫び申し上げます。
ありがとう