无法从内部 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 时取消任务。
我有一个内部 class,它在我的主 class
中扩展了 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
}
}
}
我正在为内部 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 时取消任务。