我有一个Inner类,它在我的主类
中扩展了AsyncTaskpublic 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;分配正确的值。在内部类中,但我无法访问我的主类中的值。
答案 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时取消任务的方法。