我正在努力将doInBackground方法中的变量传递给我的OnCreate()。老实说,我不敢相信我遇到这么多问题。
将doInBackground中的AsyncTask方法中的String传递给OnCreate,我想将String传递给Textview。和setTextView一起使用String。
我已经厌倦了在doInBackground&中创建简单的方法。 AsyncTask方法并在我的onCreate()中调用它。但是变量始终为null。我相信我很想理解onCreate()的一个方面。
public class OutboxActivity extends ListActivity {
….
…
public void onCreate(Bundle savedInstanceState) {
….
//AsyncTask method
new LoadOutbox().execute();
textView = (TextView) findViewById(R.id.textView6);
textView.setText("ValueNeeded);
Log.d("response", "TOUR NAME: " + ValueNeeded) );
…….
class LoadOutbox extends AsyncTask<String, String, String>
{
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
….
}
protected String doInBackground(String... args)
{
..CODE THAT GETS VALUE IS IN HERE...
//ValueNeeded Is
ValueNeeded = c.getString(TAG_TOUR);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
答案 0 :(得分:2)
您必须在onPostExecute
而不是doInBackground
中执行此操作。只需加入onPostExecute
textView.setText("ValueNeeded);
你的问题不是“理解onCreate()的一个方面,而是”理解AsyncTask的一个方面“
答案 1 :(得分:1)
你的onCreate需要很快。 AsyncTask的要点是在另一个线程中执行操作,以便onCreate可以运行。
实施onPostExecute(...)并填写结果。您的onCreate可能需要某种“正在加载...”消息,以向用户表明您正在获取数据。
答案 2 :(得分:1)
protected String doInBackground(String... args) {
..CODE THAT GETS VALUE IS IN HERE...
//ValueNeeded Is
ValueNeeded = c.getString(TAG_TOUR);
// return your value needed here
return ValueNeeded;
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
// this result parameter has the value what you return in doInBackground
// now it has valueNeeded
// set that value to your textview
textView.setText("ValueNeeded);
}