0

伙计,我在这里待了大约 2 个小时,一件事似乎很简单,但从不返回对象的数量。

我将解释一下代码:

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

在 OnPostExecute 我这样做:

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

结果活动.java

public class ResultActivity extends Activity {

    public static int rec_count;
...

问题是:当我输入ResultActivity.rec_countonCreate总是返回 0,但我让日志显示之前的样子:

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

这会正确返回计数。

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

4

3 回答 3

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

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

于 2013-11-10T12:27:06.900 回答
0

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

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

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

于 2013-11-10T04:57:32.843 回答
0

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

于 2013-11-10T04:19:23.603 回答