Доброе утро StackOver Flow Pros,Fatal Exception AsyncTask # 1 и Android doInBackground()
мне нужна небольшая помощь здесь. Я запускаю приложение для Android, которое вызывается в базу данных MySql с помощью php-скрипта. Когда я запускаю приложение, я получаю ошибку Fatal Exception для AsyncTask # 1, вызванную исключением нулевого указателя. Он сказал, что это произошло во время выполнения doInBackground. Это учебник, который я следую из MyBringBack. Мне действительно нужно обмануть голову, потому что я пытался понять это в течение нескольких дней. Если я удалю/комментирую большинство операторов Log.d, он будет работать нормально, но я не буду видеть теги для того, что происходит из ответов JSON, код указан ниже, может кто-нибудь помочь мне понять это или сказать мне, что неправильно с кодом.
Вот журнал ошибок из LogCat
10-25 09: 27: 47,818: Е/JSON Parser (1041): Ошибка синтаксического анализа org.json.JSONException данные: массив значений (2) типа java.lang.String не может быть преобразована в JSONObject 10-25 09: 27: 47.818: W/dalvikvm (1041): threadid = 11: выход потока с неперехваченным исключением (группа = 0xb1b06ba8) 10-25 09: 27: 47.828 : E/AndroidRuntime (1041): FATAL EXCEPTION: AsyncTask # 1 10-25 09: 27: 47.828: E/AndroidRuntime (1041): Процесс: com.bobcatservice, PID: 1041 10-25 09: 27: 47.828: E/AndroidRuntime (1041): java.lang.RuntimeException: Произошла ошибка при выполнении doInBackg round() 10-25 09: 27: 47.828: E/AndroidRuntime (1041): at android.os.AsyncTask $ 3.done (AsyncTask.java:300) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): при java.util.concurrent.FutureTask.finishCompletion (FutureTask.java:355) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): at java.util.concurrent.FutureTask.setException (FutureTask. java: 222) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): at java.util.concurrent.FutureTask.run (FutureTask.java:242) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): at android.os.AsyncTask $ SerialExecutor $ 1.run (AsyncTask.java:231) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): при java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1112) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): при java.util.concurrent.ThreadPoolExecutor $ Worker.ru n (ThreadPoolExecutor.java:587) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): at java.lang.Thread.run (Thread.java:841) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): вызвано: java.lang.NullPointerException 10-25 09: 27: 47.828: E/AndroidRuntime (1041): at com.bobcatservice.Login $ AttemptLogin.doInBackground (Login.java:126) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): at com.bobcatservice.Login $ AttemptLogin.doInBackground (Login.java:1) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): at android.os.AsyncTask $ 2.call (AsyncTask.java:288) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): at java.util.concurrent.FutureTask.run (FutureTask.java:237) 10-25 09: 27: 47.828: E/AndroidRuntime (1041): ... 4 далее 10-25 09: 27: 49.968: E/WindowManager (1041): android.vie w.WindowLeaked: активность com.bobcatservice.Login просочилась в окно com.android.internal.policy.impl.PhoneWindow $ DecorView {b1e8e430 VE .... R ...... D 0,0-684,192}, изначально добавлено здесь 10-25 09: 27: 49.968: E/WindowManager (1041): at android.view.ViewRootImpl. (ViewRootImpl.java:348) 10-25 09: 27: 49.968: E/WindowManager (1041): на android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:248) 10-25 09: 27: 49.968: E/WindowManager (1041): на android.view.WindowManagerImpl.addView (WindowManagerImpl.java:69) 10- 25 09: 27: 49.968: E/WindowManager (1041): at android.app.Dialog.show (Диалог.Java: 286)
А вот код в вопросе
//AsyncTask is a seperate thread than the thread that runs the GUI
//Any type of networking should be done with asynctask.
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(Login.this);
pDialog.setMessage("Attempting login...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
// Check for success tag
int success;
String username = user.getText().toString();
String password = pass.getText().toString();
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
Log.d("request!", "starting");
// getting product details by making HTTP request
JSONObject json = jsonParser.makeHttpRequest(
LOGIN_URL, "POST", params);
try {
// check your log for json response
Log.d("Login attempt", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Log.d("Login Successful!", json.toString());
Intent i = new Intent(Login.this, Welcome.class);
finish();
startActivity(i);
return json.getString(TAG_MESSAGE);
}else{
Log.d("Login Failure!", json.getString(TAG_MESSAGE));
return json.getString(TAG_MESSAGE);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();
if (file_url != null){
Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show();
}
}
}
}
Привет, aga, когда я пошел в режим отладки, я установил точку останова в заявлении JSONObject json = jsonParser.makeHttpRequest (Login_URL, «POST», params); и после того, как я перехожу на утверждение, результат json равен нулю, не уверен, в чем проблема. –
Спасибо, ага, после прошивки и чтения, внимательно прочитав ваш комментарий, я вернулся в свой php-файл и обнаружил, что проблема была в скрипте, у меня было несколько дампов var, которые выводили информацию, которая ввернула JSON вверх –