2014-04-04 1 views
0

자격이 있습니다. 왜 안드로이드에서 데이터베이스로부터 데이터를 가져 오는 것이 가장 좋은가? 내 코드안드로이드에서 innner 클래스를 할당 할 때 ArrayList 데이터가 null이 됨

class MyClass{ 

List<String> listdata; 

public void getData(){ 

new DownloadTask(){ 

    protected void onPostExecute(List<String> result) { 
     listdata = result; 
    // listdata contain 10 records 

    } 

}.execute(); 


// here list data is null out side asynctask 
    listdata is null 

} 
private class DownloadTask extends AsyncTask<Void, Void, List<String>> { 

    protected List<Stirng> doInBackground() { 

     return data.getAllRecords(); 
    } 


} 
} 

아무 잘못이 날이 저를 수정하는 경우, 감사

답변

0

listdatadoInBackground()가 완료되면 나중에에서 호출되는 onPostExecute()에 값을 할당됩니다.

doInBackground(Params...)이 단계는 시간이 오래 걸릴 수 백그라운드 계산을 수행하는데 사용된다.

onPostExecute(Result)

백그라운드 계산 완료된 후 UI 스레드 불려. 백그라운드 계산의 결과는이 단계에 매개 변수로 전달 된 입니다.

작업을 실행 한 후 다음 줄의 listdata 값에 액세스하려고 시도합니다. 작업이 아직 완료되지 않았기 때문에 null이되며 onPostExecute()은 아직 호출되지 않았습니다.

0

최종적이지 않습니다. 동봉 된 값을 사용하고 있지 않습니다.

class MyClass{ 

    final List<String> listData; 

    public myClass(){ 
     listData = new ArrayList<String>(); 
    } 

    public void getData(){ 

     new DownloadTask(){ 
      protected void onPostExecute(List<String> result) { 
      listData.addAll(result); 
      listDataRetrieved(); 
     }; 

    }.execute(); 

    private final void listDataRetrieved(){ 
     assertTrue(listData != null && containsCorrectElements()); 
    } 

    private class DownloadTask extends AsyncTask<Void, Void, List<String>> { 
     protected List<String> doInBackground() { 
      return data.getAllRecords(); 
     } 
    } 
} 
관련 문제