获取静态方法上的异步任务计数始终返回0

时间:2013-11-10 03:28:33

标签: java android static android-asynctask

芒,我在这里大约2个小时的一件事似乎非常简单,但永远不会返回对象的数量。

我将解释白衣代码:

DownloadFileAsyncTask.java(是我的异步任务)

在OnPostExecute中我做了这个:

if(customAdapter != null){
    Log.i("solteiroApp","object count is "+customAdapter.getCount());
    ResultActivity.rec_count  = customAdapter.getCount(); // HERE I PASS COUNT
}

ResultActivity.java

public class ResultActivity extends Activity {

    public static int rec_count;
...

问题是:当ResultActivity.rec_count onCreate中的Log.i("solteiroApp","object count is "+customAdapter.getCount()); 总是返回0时,我会记录我之前显示的日志:

{{1}}

这会正确返回计数。

我不知道因为这个,如果有人有一个sugestio来得到这个数量请说我,我在这里尝试返回此计数出现在活动但没有任何返回我执行的时间值,如果我再次使用AsyncTask返回之前的值,请有人帮助我。

3 个答案:

答案 0 :(得分:0)

1,是否在调用OnPostExecute之前在onCreate中获取rec_count?检查你的代码 2,如果没有,请在rec_count之前添加volatile:public static volatile int rec_count,请试试看,希望对您有所帮助。

答案 1 :(得分:0)

你无法做你想做的事。当Android(重新)创建它们要运行的Context时,Android OS将破坏并重新创建静态类。我还学习了(困难的方法)单例类不能用于将数据从一个Activity保存到另一个。

您需要做的是将数据传递到其Intent Bundle中的新Activity,或将其保存在SharedPreference中。使用回调接口是一个坏主意,因为您希望操作前进到下一个活动,并且(如果需要)允许操作系统销毁之前的活动。

为下一个Activity创建Intent时,使用Intent.putExtra(...)方法添加数据以传递给新Activity。在新的Activity中,您使用getIntent()。get * Datatype * Extra(..)方法来检索数据。

答案 2 :(得分:0)

我明白了!

在我的AsyncTask中,我传递了TextView的参数,并在AsyncTask中声明了WeakReference的方式,这个:

public class DownloadFileAsyncTask extends AsyncTask<String,Void,String> {
..
    private WeakReference list=null,count_text=null; // Views i update in my AsyncTask
..

构造

public DownloadFileAsyncTask(View v,Context contextt,View txt) {
    list = new WeakReference(v);
    count_text = new WeakReference(txt);
    this.context = contextt;
}

和onPostExecute:

   ListView l = (ListView) list.get();
   TextView t = (TextView) count_text.get();

   t.setText(customAdapter.getCount()+" objects found");

感谢所有人的帮助,有时在错误的某个时候离开,然后回来,新的想法回来了,谢谢所有人。