无法从内部类中获取数据

时间:2015-09-22 09:20:38

标签: java android oop android-asynctask inner-classes

我有一个Inner类,它在我的主类

中扩展了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
    }

}
}

我正在为我的String Variable&#34;变量&#34;分配正确的值。在内部类中,但我无法访问我的主类中的值。

4 个答案:

答案 0 :(得分:2)

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

你调用execute但主线程继续,因此变量仍为空,因为AsyncTask.onPostExecute仍未被调用。

答案 1 :(得分:0)

您使用异步任务,它会为您创建执行代码的线程。你的变量是null,因为你的线程没有完成他的工作。

答案 2 :(得分:0)

创建内部类对象,如。

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

那就是它。

答案 3 :(得分:0)

如果您是因为asynk任务而导致的,那么您可以这样做: asynk任务的单独类:

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

在您的活动中:

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时取消任务的方法。