我有一个AsyncTask匿名类,我希望将它生成的数据发送回活动类,而不必使用.get()来停止UI线程。我虽然遇到了一些麻烦。我到处搜索,我找到了很多答案,但没有任何东西能够以一种真正可以抓住的方式一步一步地打破它(无论如何)。所以,这是我的序列:
一个。定义界面
package com.example.jsonbourne;
public interface AsyncTaskInterface {
public void callback(); }
湾在AsyncTask类中,创建一个侦听器方法:
public void setListener(AsyncTaskInterface listener) {
mListener = listener;
}
℃。在onPostExecute()中设置监听器的回调,以便调用实现类:
@Override
protected void onPostExecute(Void result) {
//CALLBACK INTERFACE IMPLEMENTATION
mListener.callback();
}
d。在UI活动中,在AsyncTask对象上设置侦听器:
@Override
public void onCreate(Bundle firebug) {
super.onCreate(firebug);
setContentView(R.layout.list_user);
;
lv = (ListView) findViewById(R.id.listv);
gj = new GetJson(this);
// CALLBACK INTERFACE IMPLEMENTATION
gj.setListener(this);
}
(lv,gj是在活动类声明之后声明的类对象)
即最后,在UI类中实现接口回调方法:
public void callback() {
ArrayList<String> al = gj.getData();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(UserList.this,
android.R.layout.simple_list_item_1, al);
lv.setAdapter(adapter);
Toast.makeText(this, "Synchronization complete", Toast.LENGTH_SHORT)
.show();
}
虽然不起作用。有任何想法吗?我的意思是“它不起作用”是ListView没有填充,但实际上如果我在AsyncTask上调用.execute()。get()。
答案 0 :(得分:0)
没关系,我在考虑了一下之后自己解决了这个问题:在我发布的代码中,AsyncTask永远不会被调用,所以callback()方法永远不会被运行。
我只是在我的onCreate()方法中添加了gj.getData()(以便运行AsyncTask)并且它运行良好。