尝试在AsyncTask的onPostExecute()方法之后使用接口来理解回调

时间:2014-03-28 16:32:56

标签: java android interface android-asynctask callback

我有一个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()。

1 个答案:

答案 0 :(得分:0)

没关系,我在考虑了一下之后自己解决了这个问题:在我发布的代码中,AsyncTask永远不会被调用,所以callback()方法永远不会被运行。

我只是在我的onCreate()方法中添加了gj.getData()(以便运行AsyncTask)并且它运行良好。