2014-03-28 2 views
0

AsyncTask 익명 클래스가 있고 .get을 사용하여 UI 스레드를 멈추지 않고 생성 된 데이터를 활동 클래스에 보내려고합니다.(). 나는 문제가 좀있다. 나는 도처에서 수색했으며 많은 답변을 찾았지만 실제로는 (나에게, 어쨌든) 이해할 수있는 방법으로 단계적으로 그것을 어기는 것은 없습니다. 여기 내 순서가 있습니다 :AsyncTask의 onPostExecute() 메서드 다음에 인터페이스를 사용하여 콜백을 이해하려고 시도했습니다.

a. 인터페이스 정의

package com.example.jsonbourne;

공중 인터페이스 AsyncTaskInterface {

public void callback(); } 

B. AsyncTask 클래스에서 수신기 메서드를 만듭니다.

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

c. onPostExecute()에서 수신기 클래스에 콜백을 설정하여 구현 클래스를 호출 할 수 있습니다.

d.

@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 클래스 오브젝트 잘 활동 클래스 선언 후에 선언되는)

E 다음 UI 활동에서 AsyncTask를 개체에 수신기를 설정. 마지막으로 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는 콜백() 메서드가 결코 호출되지 않기 때문에 callback() 메서드는 실행되지 않는다.

내 onCreate() 메소드에 gj.getData()를 추가하여 (AsyncTask가 실행되도록) 완벽하게 작동합니다.

관련 문제