2015-09-22 38 views
0

得到的數據我有延伸的AsyncTask我的主類無法從內部類

public class MainActivity extends Activity { 
String variable; 
public onCreate(){ 

    onClickListener{ 
    new InnerClass().execute(params); 
    variable // Here the value is always null 
    } 
} 

class InnerClass extends AsyncTask<String,Void,JSONObject>{ 
    protected JSONObject doInBackground(String... params){ 
     /* Relevant Code 
     */ 
    } 

    protected void onPostExecute(JSONObject result){ 
    variable = value; // required value being assigned to the variable 
    } 

} 
} 

我得到的內部類分配給我的字符串變量「變量」適當的值內的內部類,但我無法訪問我的主類中的值。

+0

你不應該公開這樣的公共變量。而是使用回調,並使用內部類中的觸發器來觸發主類中的方法 –

+0

這是因爲您在異步任務設置它之前正在查看值... – immibis

回答

2
new InnerClass().execute(params); 
variable // Here the value is always null 

你叫execute但你的主線程繼續,所以變量仍然是零,因爲AsyncTask.onPostExecute仍然不叫。

+1

這不是問題所在。問題是變量在被設置在內部類中之前在main中被訪問 –

+0

我回答了原始問題,並帶有輸入編輯,所以也許我沒有打開你。抱歉。 –

+0

原問題中的問題是一樣的。我只是稍微編輯了問題標題(之後將其改回) –

0

您使用異步任務,它創建線程執行您的代碼。你的變量爲空,因爲你的線程沒有完成他的工作。

0

創建內部類對象。

InnerClass inner=new InnerClass(); 
String name=inner.name; 

就是這樣。

0

如果你婉從asynk任務結果,你可以做這樣的:

class InnerClass extends AsyncTask<String,Void,JSONObject>{ 
    protected JSONObject doInBackground(String... params){ 
    /* Relevant Code 
    */ 
    } 
} 

在你的活動:爲asynk任務 單獨的類

public class MainActivity extends Activity { 
    String variable; 
    public onCreate(){ 

    onClickListener{ 
     startAsync(); 
    } 
    } 
    private void startAsync(){ 
     InnerClass task = new InnerClass(){ 

      protected void onPostExecute(JSONObject result){ 
       variable = value; 
      } 

     }; 
     task.execute(params); 

    } 
} 

這僅僅是爲了適應您的碼。更好的方法是在appliaction上下文中完成長時間的任務,並通過EventBus將結果發送到活動/片段。 如果使用上面的實現,則必須創建方法來在調用onDestroy時取消任務。