2013-11-10 89 views
0

勒芒,即时通讯在这里约2小时的一件事情,它似乎很简单,但永远不会返回对象的数量。获取静态方法异步任务总数返回0

我将解释丝毫代码:在OnPostExecute

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

我有这样的:

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

问题是:当我得到中的总是返回0,但我使日志如何显示前:

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

并且这将返回计数正确。

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

+0

是你的asynctask你的活动类的内部类吗? – Raghunandan

+0

不,是其他类:DownloadFileAsyncTask。java – overallduka

+0

然后你可以使用一个接口作为回调从asynctask获取计数到活动类或使asynctask成为一个内部类,并在'nPostExecute – Raghunandan

回答

0

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

+0

1 - OnPostExecute之后。我尝试但返回相同的0 = /。 – overallduka

0

你不能做你想做的事情。 Android操作系统会在创建它们要运行的上下文时销毁并重新创建静态类及其静态变量。我还了解到(单方面)单类不能用于将数据从一个Activity保存到另一个。

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

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

+0

没有是过渡到其他活动,我的AsyncTask返回对象列表,并在此我想要得到这个对象的计数,谢谢。 – overallduka

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

感谢所有在这次的帮助下,有时候会很好的离开这个错误并回来,新的想法会回来e,谢谢大家。