Java 从onpostexecute发送值
我正在使用AsyncTask执行后台任务,在完成任务后,我想将onPostExecute方法的结果字符串设置为另一个活动的构造函数,并从那里将该字符串设置为TextView。当我在构造函数中打印日志时,它正在打印字符串,但当我在textview上设置相同的字符串时,它会给出空字符串。(在textview上设置的字符串是空的,所以它不会打印任何内容。) 我的任务代码:Java 从onpostexecute发送值,java,android,android-asynctask,Java,Android,Android Asynctask,我正在使用AsyncTask执行后台任务,在完成任务后,我想将onPostExecute方法的结果字符串设置为另一个活动的构造函数,并从那里将该字符串设置为TextView。当我在构造函数中打印日志时,它正在打印字符串,但当我在textview上设置相同的字符串时,它会给出空字符串。(在textview上设置的字符串是空的,所以它不会打印任何内容。) 我的任务代码: @Override protected void onPostExecute(String s) { super.onPos
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.d("Answer1",s);
new Answer(s);
}
我的回答活动,在该活动中,我通过构造函数设置字符串,并在textview上设置该字符串的值,但该字符串为空
public class Answer extends AppCompatActivity {
TextView textView;
String str;
// Dont Delete this
Answer(){
}
// Here, Log will print right string, but not on textview
Answer(String str){
this.str = str;
Log.d("Answer2",this.str);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_answer);
textView = findViewById(R.id.SetSteps);
// The String set here is empty, can you please elaborate???
textView.setText(str);
}
}
你应该永远不要自己实例化一项活动。正确的方法是通过意图将所需数据传递给新活动:
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Intent intent = new Intent(CurrentActivity.this, Answer.class);
intent.putExtra("MY_DATA", s);
startActivity(intent);
}
然后在回答活动中,您可以收到以下值:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_answer);
textView = findViewById(R.id.SetSteps);
String result = getIntent().getExtras().getString("MY_DATA","");
textView.setText(result);
}
1-将上下文变量添加到AsyncTask中
Context context = getApplicationContext();
2-在onPostExecute中,创建新的意图,将字符串添加到意图中并启动活动:
Intent intent = new Intent(context, Answer.class);
intent.putExtra("Answer1",s);
context.startActivity(intent);
3-在回答活动中,您可以从以下意图中获取字符串:
Intent intent = getIntent();
String answer = intent.getStringExtra("Answer1");
if(answer !=null){
// do what you want
}
PS:请从您的活动中删除构造函数,不建议这样做这根本不是Android的工作方式。Android框架永远不会调用接受参数的构造函数,你也不应该自己创建一个新的活动。要将参数传递给活动,请在传递给
startActivity
的意图上使用附加。它打印从onpostexecute方法获得的字符串,但我无法在oncreate中访问它。我有一个问题,如果我从onpostexecute发送意图,android不会只在一个线程上运行吗?那么为什么我需要使用AsyncTask,我需要从主线程运行UI并通过AsyncTask设置数据。可能吗?我的意思是,我需要通过主UI线程发送意图,并通过AsynTask发送数据。当您完成工作时,会调用OnPostExecute,您需要异步任务,因为doInBackground方法将在后台线程中完成您的工作。PostExecute中的代码再次在主线程中执行,这正是因为您需要访问异步任务生成的内容。