【发布时间】:2016-01-20 15:51:13
【问题描述】:
我正在实现一个名为 MyAdapter 的类,它扩展了 BaseAdapter。在 myAdapter 类中,我正在实现一个名为 AttemptLike 的类,它扩展了 AsyncTask。在类 AttemptLike while Implementind doInBackground 函数中,我无法使用 finish();因此,每当我调用 Attemptlike 类时,我的应用程序都会崩溃。所以请告诉我如何处理错误。
代码是这样的
class MyAdapter extends BaseAdapter{
.
.
.
public class Attemptlike extends AsyncTask<String, String, String>{
{
protected String doInBackground(String... args)
{
try
{
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("somedata1", field1));
params.add(new BasicNameValuePair("somedata2", field2));
params.add(new BasicNameValuePair("geteventdata", evnt));
Log.d("request!", "starting");
JSONObject json = jsonParser.makeHttpRequest( LOGIN_URL, "POST", params);
// checking log for json response
Log.d("Login attempt", json.toString());
// success tag for json
success = json.getInt(TAG_SUCCESS);
if (success == 1)
{
Log.d("Successfully Liked!", json.toString());
finish();
// this finish() method is what i am not able use which is resulting in crashing of app
}
catch (JSONException e)
{
e.printStackTrace();
}
return null;
}
}
new AttemptLogin().execute();
return convertView;
}
}
堆栈跟踪
FATAL EXCEPTION: AsyncTask #1
Process: ks.developers.festo, PID: 29568
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:304)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference
at ks.developers.festo.list.adapter.MyAdapter$2$1AttemptLike.doInBackground(MyAdapter.java:237)
at ks.developers.festo.list.adapter.MyAdapter$2$1AttemptLike.doInBackground(MyAdapter.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4 more
【问题讨论】:
-
finish()不是AsyncTask... 或BaseAdapter上的方法。你想做什么? -
finish 是为了活动,所以如果你想从异步任务中关闭调用活动,请检查this answer。
-
我已将堆栈跟踪粘贴到此处,请看一下。
-
在此站点中搜索“如何读取堆栈跟踪”。
标签: android android-asynctask baseadapter