Отправка значения из onpostexecute - PullRequest
0 голосов
/ 18 мая 2018

Я использую AsyncTask для выполнения фоновой задачи. После выполнения своей задачи я хочу установить результирующую строку из метода onPostExecute в конструктор другой операции, а оттуда я хочу установить эту строку в TextView.когда я печатаю журнал внутри конструктора, он печатает строку, но когда я устанавливаю ту же строку в textview, она дает пустую строку (строка, заданная в textview, пуста, поэтому просто ничего не печатает).

MyКод 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 голосов
/ 18 мая 2018

1 - Добавьте переменную Context в свой 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: Пожалуйста, удалите конструкторы из своего занятия, это не рекомендуется

0 голосов
/ 18 мая 2018

Вы не должны никогда создавать экземпляр Деятельности самостоятельно.Правильный способ - передать нужные данные через намерение новому действию:

@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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...