AsyncTask的:传递价值的活动(onCreate方法)价值、方法、AsyncTask、onCreate

2023-09-05 09:01:10 作者:一巴掌扇死你虚伪的心 。

UPDATE1

活动:

 公共整数_number = 0;
@覆盖
    公共无效的onCreate(包savedInstanceState){
如果(_number大于0)
        {
            Log.d(onSuccessfulExecute,+ _number);
        }
        其他
        {
            Log.d(onSuccessfulExecute,不空的歌曲清单);
        }
}

公众诠释onSuccessfulExecute(INT numberOfSongList){

_number = numberOfSongList;

如果(numberOfSongList大于0)
{
    Log.d(onSuccessfulExecute,+ numberOfSongList);
}
其他
{
    Log.d(onSuccessfulExecute,不空的歌曲清单);
}
    返回numberOfSongList;
}
 

末UPDATE1

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

如何从AsyncTask的onPostExecute()...传递价值的活动。

我的code并返回从onPostExecute(值)和更新用户界面,但我正在寻找一种方法来设置活动变量(NumberOfSongList )从AsynchTask未来

的AsyncTask类:

  @覆盖
    公共无效onPostExecute(asynctask.Payload有效载荷)
    {
         AsyncTemplateActivity应用=(AsyncTemplateActivity)payload.data [0];

             //下面code会更新用户界面TextView控件
             INT答案=((整数)payload.result).intValue();
             app.taskStatus.setText(成功:回答=+答案);

            //问题:
            //我试图填充值的变量,但似乎并不喜欢的方式我这样做:
            app.NumberOfSongList = payload.answer;
            ..............
            ..............
    }
 

活动:

 公共整数NumberOfSongList;
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);

        //一些UI code
        新ConnectingTask()执行()。
        Log.d(的onCreate,+ NumberOfSongList);

    }
 
Pro Android学习笔记 七四 HTTP服务 8 使用后台线程AsyncTask

解决方案

有关使用setter方法​​是什么?例如,

 私人诠释_number;
公众诠释setNumber(INT编号){
    _number =号;
}
 

更新:的

请看看这个code。这会做你想要完成的任务。

活动类

 公共类TestActivity延伸活动{
    公众诠释号码;

    @覆盖
    保护无效的onCreate(包savedInstanceState){
        // TODO自动生成方法存根
        super.onCreate(savedInstanceState);

        的setContentView(R.layout.test);

        按钮btnDisplay =(按钮)findViewById(R.id.btnDisplay);
        btnDisplay.setOnClickListener(新OnClickListener(){

            公共无效的onClick(视图v){
                吐司面包= Toast.makeText(v.getContext()生成的号码:+将String.valueOf(号码),Toast.LENGTH_LONG);
                toast.show();
            }
        });

        新TestTask(本).execute();
    }
}
 

的AsyncTask类

 公共类TestTask扩展的AsyncTask<虚空,虚空,整数GT; {
    私人最终语境_context;
    私人最终字符串变量=TestTask;
    私人最终随机_rnd;

    公共TestTask(上下文的背景下){
        _context =背景;
        _rnd =新的随机();
    }

    @覆盖
    在preExecute保护无效(){
        // TODO:做任务初始化。
        super.on preExecute();
    }

    @覆盖
    保护整数doInBackground(空... PARAMS){
        //模拟一个长期运行的程序。
        尝试 {
            视频下载(3000);
        }赶上(InterruptedException异常E){
            Log.e(TAG,e.getMessage());
        }

        返回_rnd.nextInt();
    }

    @覆盖
    保护无效onPostExecute(整数结果){
        TestActivity测试=(TestActivity)_context;
        test.Number =结果;
        super.onPostExecute(结果);
    }
}
 

Update1

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

end Update1

UPDATE: AsynchTask has its own external class.

How to pass an value from AsyncTask onPostExecute()... to activity

my code does returning value from onPostExecute() and updating on UI but i am looking for a way to set the activity variable (NumberOfSongList) coming from AsynchTask.

AsyncTask class:

@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);

    } 

解决方案

What about using a setter method? e.g.

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

UPDATE:

Please look at this code. This will do what you're trying to accomplish.

Activity class

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 class

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