如何将一个变量从AsyncTask返回到Activity中的OnCreate()

时间:2015-07-29 21:10:35

标签: java android variables methods android-asynctask

ISSUE / ERROR:

我正在努力将doInBackground方法中的变量传递给我的OnCreate()。老实说,我不敢相信我遇到这么多问题。

目的:

将doInBackground中的AsyncTask方法中的String传递给OnCreate,我想将String传递给Textview。和setTextView一起使用String。

我的理解:

我已经厌倦了在doInBackground&中创建简单的方法。 AsyncTask方法并在我的onCreate()中调用它。但是变量始终为null。我相信我很想理解onCreate()的一个方面。

主要活动: - 我想在textView

中设置变量'ValueNeeded'
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) );

  …….

AsyncTask - 包含doInBackground

 class LoadOutbox extends AsyncTask<String, String, String> 
   {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        ….
    }

doInBackground - String ValueNeeded是我需要传递给onCreate()的变量

   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;
    }

3 个答案:

答案 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);
}