从onpostexecute发送值

时间:2018-05-18 17:53:36

标签: java android android-asynctask

我正在使用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);
    }

}

2 个答案:

答案 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:请从您的活动中删除构造函数,不建议