Java 在android中从非活动类调用activity方法

Java 在android中从非活动类调用activity方法,java,android,android-asynctask,Java,Android,Android Asynctask,我正在实现一个类,它扩展了AsyncTask,并在这个类中执行一个http请求。这个类不是一个活动,它位于一个单独的java文件中,因为我想多次使用这个类 我在活动中实例化了此类的一个对象,以在单独的线程中执行http请求。当线程执行时,我想调用我的活动的一个方法 我如何实现这一点?我需要我的活动中http请求的结果,但到目前为止我无法处理这个问题 这是线程任务的代码 public class PostRequest extends AsyncTask<String, Void, Stri

我正在实现一个类,它
扩展了AsyncTask
,并在这个类中执行一个http请求。这个类不是一个
活动,它位于一个单独的java文件中,因为我想多次使用这个类

我在
活动
中实例化了此类的一个对象,以在单独的线程中执行http请求。当线程执行时,我想调用我的
活动的一个方法

我如何实现这一点?我需要我的
活动中http请求的结果
,但到目前为止我无法处理这个问题

这是线程任务的代码

public class PostRequest extends AsyncTask<String, Void, String> {
public String result = "";

@Override
protected String doInBackground(String... urls) {
    try {
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://bla/index.php?" + urls[0]);
        // httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        InputStream is = entity.getContent();

        // convert response to string
        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        result = sb.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return result;
}

@Override
protected void onPostExecute(String result) {

}
}

在构造函数中传递活动引用

作为

公共类PostRequest扩展了异步任务{
公共字符串结果=”;
私人活动能力;
公共PostRequest(活动){
超级();
活动性=活动性;
}
......

您不必执行
onPostExecute()
,因为这是在流程
doInBackground
完成后调用的,然后您可以使用传递到AsyncTask构造函数中的活动引用在UI上运行任何时间的方法


只要记住
onPostExecute()
方法在UI线程上运行,因此在此方法中,如果需要,您可以尝试修改您的视图。

查看此问题…和接受的答案。如果您希望将可重用的
AysncTask
作为一个独立类,那么使用侦听器作为您所有活动的回调是最好的方法。

但是我现在如何访问meth这个活动的od?我试着像mActivity.Display()那样做;但这不起作用……谢谢!或者在PostRequest函数中使用你的Activity名称来代替Activity,只需在你的活动中键入cast Activity…@DheereshSingh,谢谢,我认为对Activity的类型转换应该足够了,但你是对的,它应该键入到真正的Activity类中。
public class ListActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list);


    PostRequest task = new PostRequest();
    task.execute(new String[] { "action=getUsers" });
    task.onPostExecute(task.result) {

    }
}

public void Display(String result) {
    try {
        JSONArray jArray = new JSONArray(result);
        JSONObject json_data = jArray.getJSONObject(0);
        String value = json_data.getString("name");
        TextView text = (TextView) findViewById(R.id.value);
        text.setText(value);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
}
public class PostRequest extends AsyncTask<String, Void, String> {
public String result = "";
private Activity mActivity;

 public PostRequest(Activity activity){
          super();
         mActivity = activity;
}

......