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()을 호출하면 실제로 실행됩니다.