有问题的自定义适配器在ListFragment中偶尔为空

时间:2013-02-20 20:19:42

标签: android android-fragments android-arrayadapter

所以这个问题只发生了一些时间。我没有看到任何押韵或理由。我怀疑,用户在应用程序中移动的速度越快,发生的可能性就越大。

这是LogCat:

02-20 12:09:58.526: E/AndroidRuntime(18777): FATAL EXCEPTION: main
02-20 12:09:58.526: E/AndroidRuntime(18777): java.lang.NullPointerException
02-20 12:09:58.526: E/AndroidRuntime(18777):    at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:128)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at com.---.---.ReviewAdapter.<init>(ReviewAdapter.java:42)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at com.---.---.RateFragmentActivity$ReviewFragment$ReviewTask.onPostExecute(RateFragmentActivity.java:1203)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at com.---.---.RateFragmentActivity$ReviewFragment$ReviewTask.onPostExecute(RateFragmentActivity.java:1)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at android.os.AsyncTask.finish(AsyncTask.java:631)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at android.os.Looper.loop(Looper.java:137)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at android.app.ActivityThread.main(ActivityThread.java:5193)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at java.lang.reflect.Method.invokeNative(Native Method)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at java.lang.reflect.Method.invoke(Method.java:511)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
02-20 12:09:58.526: E/AndroidRuntime(18777):    at dalvik.system.NativeStart.main(Native Method)

崩溃发生在这里:

adapter = new ReviewAdapter(getActivity(), r, tf);

rarray)不是nulltfTrueType字体也不是。

在ReviewAdapter上,这是崩溃线42的另一面:

public ReviewAdapter(Context context, Review[] objects, Typeface tf) {
        super(context, 0, objects);  // line 42

我认为上下文是null

以下是全局:

我有FragmentActivity FragmentListFragmentadapter当然在ListFragment内。这些片段都不会相互影响。它们静态显示在xml中。

所以在里面调用ReviewAdapter:

protected void onPostExecute(Void v) {

内部:

public class ReviewTask extends AsyncTask<String, String, Void> {

内部:

public static class ReviewFragment extends ListFragment {

内部:

public class RateFragmentActivity extends SherlockFragmentActivity implements
        ActionBar.TabListener {

这是事情的背景。我一定不能正确处理我的片段生命周期,但这个错误太零星了。

最后一点:我的清单中确实有这个:

   android:configChanges="orientation|screenSize|keyboardHidden"

因此配置更改不会导致此问题。

有人请帮助我:这个问题困扰了我好几个月。如果您需要更多代码来查看,请务必让我知道,我会提供!

2 个答案:

答案 0 :(得分:2)

我通过使用Luksprog的建议解决了这个问题:在设置适配器之前检查上下文中的null

简单地:

if (getActivity() != null) { \\ set adapter }

感谢大家的帮助。

答案 1 :(得分:1)

听起来你可能正在创建片段的适配器OnCreate,并且根据它的执行方式,片段可能尚未附加到活动。更多代码有助于查看ReviewTask被执行的位置,如果可以,我建议将其移至onCreateView,因为我怀疑它目前位于onCreate并且正在运行并尝试创建在片段附加到其活动之前的适配器。