2014-03-28 28 views
0

的onPostExecute()方法,我有一個的AsyncTask匿名下課瞭解使用接口回調,我想送它生成回活動類中的數據,而不必使用不用彷徨拖延UI線程()。我雖然有一些麻煩。我到處搜索,我發現了很多答案,但沒有什麼能夠真正把握它(對我來說)是一種真正可以理解的方式。所以,這是我的序列:嘗試的的AsyncTask

a。定義一個接口

包com.example.jsonbourne;

公共接口AsyncTaskInterface {

public void callback(); } 

灣在AsyncTask類中,創建一個偵聽器方法:

public void setListener(AsyncTaskInterface listener) { 
     mListener = listener; 
    } 

c。在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

這是確定的,我解決了這個問題自己想多一點之後:在代碼中我張貼的AsyncTask不會被調用所以自然回調()方法不會跑了。

我只是在我的onCreate()方法中添加gj.getData()(這樣的AsyncTask是RAN)和它完美的作品。

相關問題