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;
}
......