我正在使用AsyncTask来执行后台任务,完成我的任务后,我想将结果字符串从onPostExecute方法设置为另一个activity的构造函数,并从那里我想将该字符串设置为TextView。当我在构造函数中打印日志时它会打印字符串,但是当我在textview上设置相同的字符串时,它会给出空字符串。(textview上设置的字符串为空,所以它只是不打印任何内容。)
我的AsyncTask代码:
@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);
}
}
答案 0 :(得分:2)
你应该从不自己实例化一个活动。正确的方法是通过意图将所需数据传递给新活动:
@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 :(得分:1)
1 - 将一个Context变量添加到AsyncTask
Context context = getApplicationContext();
2 - 在onPostExecute中,创建一个新意图,将你的字符串添加到意图并开始活动:
Intent intent = new Intent(context, Answer.class);
intent.putExtra("Answer1",s);
context.startActivity(intent);
在你的答案活动中,你可以从下面的意图中获取字符串:
Intent intent = getIntent();
String answer = intent.getStringExtra("Answer1");
if(answer !=null){
// do what you want
}
PS:请从您的活动中删除构造函数,不建议