【问题标题】:Get Count of Async Task on Static Method always return 0获取静态方法上的异步任务计数始终返回 0
【发布时间】:2013-11-10 03:28:32
【问题描述】:

伙计,我在这里待了大约 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;
...

问题是:当我在onCreate 中得到ResultActivity.rec_count 时总是返回0,但我将日志设置为我之前的显示方式:

Log.i("solteiroApp","object count is "+customAdapter.getCount());

这会正确返回计数。

我不知道,因为如果有人有获得此计数的建议,请告诉我,我在这里尝试返回此计数以出现在活动中,但没有任何返回值在我执行时返回,如果我再次使用AsyncTask 返回之前的值,求大神帮忙。

【问题讨论】:

  • 你的异步任务是你的活动类的内部类吗?
  • 不,是其他类:DownloadFileAsyncTask.java
  • 那么你可以使用一个接口作为回调来获取从 asynctask 到活动类的计数,或者使 asynctask 成为一个内部类并在`nPostExecute 中获取计数

标签: java android static android-asynctask


【解决方案1】:

1,您是否在调用 OnPostExecute 之前在 onCreate 中获取 rec_count?检查你的代码 2、如果不行,在rec_count前加上volatile:public static volatile int rec_count,请试一试,希望能帮到你。

【讨论】:

  • 1 - OnPostExecute 之后。我尝试但返回相同的 0 =/.
【解决方案2】:

你不能做你想做的事。当 Android 操作系统(重新)创建它们要在其中运行的 Context 时,Android 操作系统将销毁并重新创建静态类及其静态变量。我还(艰难地)了解到单例类不能用于将数据从一个 Activity 保存到其他。

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

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

【讨论】:

  • 否是过渡到其他活动,我的 AsyncTask 返回一个对象列表,我想在其中获取这些对象的计数,谢谢。
【解决方案3】:

我明白了!

在我的 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");

感谢大家的帮助,有错的时候离开就好,有新的想法回来嘿嘿,谢谢大家。

【讨论】:

    猜你喜欢
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2019-01-22
    • 2014-05-20
    相关资源
    最近更新 更多