【发布时间】:2015-06-16 15:31:24
【问题描述】:
我目前有多个活动需要为 http post 执行 asynctask,我希望将 asynctask 作为另一个类文件,以便不同的活动可以调用 asynctask 来执行 http post 请求和 onPostExecute,调用方法 httpResult (结果)在调用异步任务的活动中。我试图传递活动,但我无法在 onPostExecute 中调用该方法。我该怎么做?
public class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_MyActivity);
//logic here...
AsyncHttpPost asyncHttpPost = new AsyncHttpPost("someContent", this, dialog);
JSONObject data = new JSONObject();
data.put("key", "value");
try {
asyncHttpPost.execute(data);
}
catch (Exception ex){
ex.printStackTrace();
}
}
public static void httpResult(String result) {
//this method has to get called by asynctask to make changes to the UI
}
}
AsyncHttpPost.java
public class AsyncHttpPost extends AsyncTask<JSONObject, String, String> {
String recvdjson;
String mData="";
private ProgressDialog dialog;
private Activity activity;
public AsyncHttpPost(String data, Activity activity, ProgressDialog dialog) {
mData = data;
this.activity = activity;
this.dialog = dialog;
}
protected void onPreExecute()
{
dialog.show();
}
@Override
protected String doInBackground(JSONObject... params) {
//logic to do http request
return "someStringResult";
}
protected void onPostExecute(String result) {
dialog.dismiss();
activity.httpResult(result); //This line gives me error : The method httpResult(String) is undefined for the type Activity
}
}
【问题讨论】:
-
你能发布你的代码并解释问题..
-
您应该发布您的代码,以便更轻松地解决您的问题。
-
用示例代码编辑了我的问题
-
从函数
httpResult中移除静态标识符,所以将public static void httpResult(String result)改为public void httpResult(String result) -
Sherif:我从 httpResult 函数中删除静态后出现同样的错误