android - 异步任务 : passing value to an Activity (onCreate method )

标签 android android-asynctask

更新1

Activity :

public Integer _number = 0;
@Override
    public void onCreate(Bundle savedInstanceState) {
if (_number >0)
        {
            Log.d("onSuccessfulExecute", ""+_number);
        }
        else
        {
            Log.d("onSuccessfulExecute", "nope empty songs lists");
        }
}

public int onSuccessfulExecute(int numberOfSongList) {

_number = numberOfSongList;

if (numberOfSongList >0)
{
    Log.d("onSuccessfulExecute", ""+numberOfSongList);
}
else
{
    Log.d("onSuccessfulExecute", "nope empty songs lists");
}
    return numberOfSongList;
}

结束 Update1

更新:AsynchTask 有自己的外部类。

如何将值从 AsyncTask onPostExecute()... 传递给 Activity

我的代码确实从 onPostExecute() 返回值并在 UI 上更新,但我正在寻找一种方法来设置来自 AsynchTask 的 Activity 变量 (NumberOfSongList)。

AsyncTask 类:

@Override
    public void onPostExecute(asynctask.Payload payload)
    {  
         AsyncTemplateActivity app = (AsyncTemplateActivity) payload.data[0];

             //the below code DOES UPDATE the UI textView control
             int answer = ((Integer) payload.result).intValue();
             app.taskStatus.setText("Success: answer = "+answer);

            //PROBLEM:
            //i am trying to populate the value to an variable but does not seems like the way i am            doing:
            app.NumberOfSongList = payload.answer;
            ..............
            ..............
    }

Activity :

  public Integer NumberOfSongList;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); 

        //Several UI Code   
        new ConnectingTask().execute();
        Log.d("onCreate", ""+NumberOfSongList);

    } 

最佳答案

使用 setter 方法怎么样?例如

private int _number;
public int setNumber(int number) {
    _number = number;
}

更新:

请看这段代码。这将完成您想要完成的任务。

Activity 类

public class TestActivity extends Activity {
    public int Number;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.test);

        Button btnDisplay = (Button) findViewById(R.id.btnDisplay);
        btnDisplay.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Toast toast = Toast.makeText(v.getContext(), "Generated number: " + String.valueOf(Number), Toast.LENGTH_LONG);
                toast.show();               
            }
        });

        new TestTask(this).execute();
    }
}

AsyncTask 类

public class TestTask extends AsyncTask<Void, Void, Integer> {
    private final Context _context;
    private final String TAG = "TestTask";
    private final Random _rnd;

    public TestTask(Context context){
        _context = context;
        _rnd = new Random();
    }

    @Override
    protected void onPreExecute() {
        //TODO: Do task init.
        super.onPreExecute();
    }

    @Override
    protected Integer doInBackground(Void... params) {
        //Simulate a long-running procedure.
        try {
            Thread.sleep(3000);         
        } catch (InterruptedException e) {
            Log.e(TAG, e.getMessage());
        }

        return _rnd.nextInt();
    }

    @Override
    protected void onPostExecute(Integer result) {
        TestActivity test = (TestActivity) _context;
        test.Number = result;       
        super.onPostExecute(result);
    }
}

关于android - 异步任务 : passing value to an Activity (onCreate method ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9742446/

相关文章:

android - 将 SMS 消息标记为已读/未读或删除在 KitKat 中不起作用的消息

java - Android - TextView 上的 NullPointerException

android - Android 谷歌地图中的蓝屏

java - Android: ListView 单元格不显示所选的休闲字体

android - 如何使 ProgressDialog 可以通过后退按钮而不是通过屏幕点击取消?

android - android中asyntask参数有什么区别?

java - AsyncTask,在 onPostExecute 与 get() 中处理结果

android - 使用 Perl 访问 Android 应用程序

java - 更改自定义适配器内容

java - 如何重新运行任务