无法从内部 class 获取数据

Unable to get data from from inner class

我有一个内部 class,它在我的主 class

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

}
}

我正在为内部 class 中的字符串变量 "variable" 分配正确的值,但我无法访问主 class 中的值。

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

您调用了 execute 但您的主线程继续运行,因此变量仍然为空,因为 AsyncTask.onPostExecute 仍未被调用。

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

像这样创建内部 class 对象。

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

就是这样。

如果你想从异步任务中得到结果,你可以这样做: 为异步任务单独 class:

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

在你的activity中:

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

  }
 }

这只是为了适配您的代码。更好的方法是在应用程序上下文中制作长任务,并通过 EventBus 将结果发送到活动/片段。 如果你使用上面的实现,你必须创建方法来在调用 onDestroy 时取消任务。