2014-02-14 170 views
0

我需要從AsyncTask訪問對象。 這裏的的AsyncTask的代碼:從AsyncTask外部訪問對象

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

    // Downloading data in non-ui thread 
    @Override 
    protected String doInBackground(String... url) { 

     // For storing data from web service 
     String data = ""; 

     try{ 
      // Fetching the data from web service 
      data = downloadUrl(url[0]); 
     }catch(Exception e){ 
      Log.d("Background Task",e.toString()); 
     } 
     return data; 
    } 

    // Executes in UI thread, after the execution of 
    // doInBackground() 
    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 

     ParserTask parserTask = new ParserTask(); 

     // Invokes the thread for parsing the JSON data 
     parserTask.execute(result); 
    } 
} 

我要訪問data。我不知道我該怎麼做。

+0

使其成爲'全局'變量 – Apoorv

+0

當您在'doInBackground'中返回'data'時,它將用作'onPostExecute'的輸入參數。因此,目前發生的事情是將'data'傳遞給你的'parserTask' –

+0

爲什麼你需要它?結果和數據是在您的AsyncTask – nikis

回答

1

另一種方法是使用私有靜態修飾符聲明data變量並創建一個公共靜態get方法。從第二個活動可以直接訪問該公共靜態方法。

private class FirstAcitivity extends Activity 
{ 
    private static String data = ""; 

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

     // Downloading data in non-ui thread 
     @Override 
     protected String doInBackground(String... url) { 

      // For storing data from web service 
      //String data = "";             // Comment this line 

      try{ 
       // Fetching the data from web service 
       data = downloadUrl(url[0]); 
      }catch(Exception e){ 
       Log.d("Background Task",e.toString()); 
      } 
      return data; 
     } 

     // Executes in UI thread, after the execution of 
     // doInBackground() 
     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 

      ParserTask parserTask = new ParserTask(); 

      // Invokes the thread for parsing the JSON data 
      parserTask.execute(result); 
     } 
    } 

    public static String getData() 
    { 
     return data; 
    } 
} 

現在,在第二個活動進入

public class SecondActivity extends Activity 
{ 
    String data = FirstActivity.getData(); 

} 
1

您還可以通過聲明的變量如下訪問:

public static String data=""; 

然後你就可以在其他活動訪問它:

ClassName.data 

其中ClassN ame將是您定義變量的類的名稱。

+0

雖然這是真的答案,但你不應該使用公共變量,而應該使用私有變量採用公開的方法,就像我一樣。 – user3301551