Java 在android中分配Inner类时ArrayList数据变为null

Java 在android中分配Inner类时ArrayList数据变为null,java,android,android-asynctask,Java,Android,Android Asynctask,我有资格在安卓系统中从数据库获取数据的最佳原因。 我的代码 class MyClass{ List<String> listdata; public void getData(){ new DownloadTask (){ protected void onPostExecute(List<String> result) { listdata = result; // listdata contain 10 records

我有资格在安卓系统中从数据库获取数据的最佳原因。 我的代码

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();
     }


 }
 }
如果有任何错误,请纠正我,Thank

listdata将在onPostExecute中分配一个值,该值将在doInBackground完成后的稍后点调用

doInBackgroundParams。。。此步骤用于执行后台操作 可能需要很长时间的计算

后台后在UI线程上调用OnPostExecuteSult 计算完成。背景计算的结果是 作为参数传递到此步骤


执行任务,然后尝试访问下一行中listdata的值。它将为空,因为任务尚未完成,onPostExecute尚未调用。

它不是最终的。您没有使用封闭的值

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();
        }
     }
 }