我試圖在我的onPostExecute
方法中設置SharedPrefences
,但在我的錯誤日誌中獲得NullPointerException
。我試過把它放到doInBackground()
但是阻止我的結果被返回。因此,這是代碼設置SharedPreferences時獲取NullPointerException
我的任務類
public class LoginTask extends AsyncTask<Void, Void, String> {
private final String mEmail;
private final String mPassword;
private SharedPreferences sharedpreferences;
private final String MyPREFERENCES = "session" ;
String url = ****
LoginTask(String email, String password) {
mEmail = email;
mPassword = password;
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public String doInBackground(Void... params) {
// TODO: attempt authentication against a network service.
try {
// Simulate network access.
Thread.sleep(2000);
} catch (InterruptedException e) {
return "false";
}
ArrayList<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>();
nameValuePairs.add(new BasicNameValuePair("email", mEmail));
nameValuePairs.add(new BasicNameValuePair("password", mPassword));
//Prepare the Post query
try {
HttpClient clientHttp = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = clientHttp.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
String line = reader.readLine();
sb.append(line + "\n");
is.close();
String result = sb.toString();
System.out.println(result);
return result;
}catch (Exception e){
return null;
}
}
@Override
protected void onPostExecute(final String res) {
try {
jObj = new JSONObject(res);
} catch (JSONException e) {
e.printStackTrace();
}
try {
if (jObj.getString("code").equals("1")) {
SharedPreferences.Editor e = sharedpreferences.edit();
e.putString(MyPREFERENCES,"active");
e.commit();
Intent myIntent = new Intent(getActivity(), HomesActivity.class);
//Lançer l'activité
startActivityForResult(myIntent, 0);
} else {
//password.setError(getString(R.string.error_incorrect_password));
//password.requestFocus();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Error !");
builder.setMessage("The information entered is incorrect.\nPlease try again!")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
protected void onCancelled() {
LoginTask = null;
//showProgress(false);
}
}
我的錯誤日誌:
10-09 12:58:50.088 2878-2878/com.example.user.unchained E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.user.unchained, PID: 2878
java.lang.NullPointerException
at com.example.user.unchained.EmailLoginActivity$LoginTask.onPostExecute(EmailLoginActivity.java:328)
at com.example.user.unchained.EmailLoginActivity$LoginTask.onPostExecute(EmailLoginActivity.java:255)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
你應該使用調試器。可能的候選者是'jObj.getString(「code」)。equals(「1」)',因爲您可能會在'null''字符串上調用'equals'。 – Mena 2014-10-09 13:19:22
你需要發佈你調用onPostExecute的代碼,而不僅僅是onPostExecute方法......我覺得在onPostExecute中的變量res將它作爲null傳遞給它。 – StackFlowed 2014-10-09 13:20:34
@wrongAnswer我認爲'onPostExecute'方法很好,只要'res!= null'。所有的堆棧跟蹤都從這裏開始。 – Mena 2014-10-09 13:21:35