早上好,StackOver Flow专家,
我需要一点帮助.我正在运行一个Android应用程序,该应用程序通过PHP脚本调出MysqL数据库,当我运行该应用程序时,我收到AsyncTask#1的致命异常错误,该错误是由空指针异常引起的.它说这是在执行doInBackground时发生的.这是MyBringBack提供的教程.我真的需要为此解决问题,因为我已经尝试了好几天了.如果我删除/注释大多数Log.d语句,它将运行良好,但是我看不到JsON响应中发生了什么的标记,下面列出了代码,有人可以帮我解决这个问题或告诉我什么吗代码有误.
这是来自logcat的错误日志
10-25 09:27:47.818: E/JsON Parser(1041): Error parsing data org.Json.JsONException: Value array(2) of type java.lang.String cannot be converted to JsONObject
10-25 09:27:47.818: W/dalvikvm(1041): threadID=11: thread exiting with uncaught exception (group=0xb1b06ba8)
10-25 09:27:47.828: E/AndroIDRuntime(1041): FATAL EXCEPTION: AsyncTask #1
10-25 09:27:47.828: E/AndroIDRuntime(1041): Process: com.bobcatservice, PID: 1041
10-25 09:27:47.828: E/AndroIDRuntime(1041): java.lang.RuntimeException: An error occured while executing doInBackground()
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): at 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): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
10-25 09:27:47.828: E/AndroIDRuntime(1041): at java.util.concurrent.ThreadPoolExecutor$Worker.run(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): Caused by: 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 more
10-25 09:27:49.968: E/WindowManager(1041): androID.vIEw.WindowLeaked: Activity com.bobcatservice.Login has leaked window com.androID.internal.policy.impl.PhoneWindow$DecorVIEw{b1e8e430 V.E….. R……D 0,0-684,192} that was originally added here
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): at androID.vIEw.WindowManagerGlobal.addVIEw(WindowManagerGlobal.java:248)
10-25 09:27:49.968: E/WindowManager(1041): at androID.vIEw.WindowManagerImpl.addVIEw(WindowManagerImpl.java:69)
10-25 09:27:49.968: E/WindowManager(1041): at androID.app.Dialog.show(Dialog.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(); } }}
}
解决方法:
If I remove/comment most of the Log.d statements it will run fine
看来我们可以在doInBackground()方法的某些日志调用中找到问题.这个如何?
Log.d("request!", "starting");
不,看起来不错.那下一个呢?
Log.d("Login attempt", Json.toString());
啊哈!我们如何获得这个Json变量?
JsONObject Json = JsonParser.makehttpRequest(LOGIN_URL, "POST", params);
检查您的http请求的结果,您可能在这里得到null.
如果Json不为空怎么办?好吧,我们还有另一个可疑的日志调用:
Log.d("Login Failure!", Json.getString(TAG_MESSAGE));
据我所记得,如果Log.d()的第二个参数为null,则您将得到NullPointerException,因此也请检查此参数.
如果这也不是问题怎么办?好吧,我建议您在这里use debugger.
总结以上是内存溢出为你收集整理的致命异常AsyncTask#1和Android doInBackground()全部内容,希望文章能够帮你解决致命异常AsyncTask#1和Android doInBackground()所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)