2015-11-02 30 views
1

我試圖用靜態片段加載佈局,並使用該佈局在的LinearLayout:錯誤加載靜態片段和FrameLayout裏(

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:baselineAligned="false" 
    android:divider="?android:attr/dividerHorizontal" 
    tools:context="com.eldad.yossi.popularmovs.MainActivity"> 
    <fragment 
     android:id="@+id/main_fragment" 
     android:name="com.eldad.yossi.popularmovs.MainActivityFragment" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="2" 
     tools:layout="@android:layout/list_content" /> 
    <FrameLayout 
     android:id="@+id/movies_detail_container" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="4" /> 
</LinearLayout> 

但是,當應用程序啓動我得到這個錯誤:

當我使用只包含片段佈局加載它們
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime: FATAL EXCEPTION: ModernAsyncTask #2 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime: Process: com.eldad.yossi.popularmovs, PID: 13809 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground() 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:142) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:818) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1437) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.content.ContentResolver.query(ContentResolver.java:462) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.ContentResolverCompatJellybean.query(ContentResolverCompatJellybean.java:29) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.ContentResolverCompat$ContentResolverCompatImplJB.query(ContentResolverCompat.java:57) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.ContentResolverCompat.query(ContentResolverCompat.java:125) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:59) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.CursorLoader.loadInBackground(CursorLoader.java:37) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:296) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:54) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:42) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:128) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  
11-02 23:02:36.418 13809-13880/com.eldad.yossi.popularmovs E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:818)  

相同的活動和片段工作。

什麼想法?

完整的代碼是在GitHub回購 - https://github.com/yossildad/PopularMovs 謝謝。

+0

你可以爲你的'Loader'添加代碼嗎? – kcoppock

+0

添加了主要問題中代碼的鏈接。謝謝! – yossildad

回答

-1

您的問題不在片段聲明中。根據堆棧跟蹤,查看您正在擴展的ModernASyncTask的doInBackground方法。 java.lang.RuntimeException:執行doInBackground()時發生錯誤 - 我猜可能你可能對上下文對象有空引用。

+0

我添加了一些調試打印,並看到在調用doInBackground方法(甚至是創建任務)之前崩潰發生。我認爲這是一個操作系統任務。 – yossildad

+0

如果您使用的加載器的共享源代碼很容易找到問題... – Pavel

+0

GitHub repo是 - https://github.com/yossildad/PopularMovs。非常感謝你! – yossildad

0

從堆棧跟蹤我可以看到你試圖從活動com.eldad.yossi.popularmovs.MainActivity的doInBackground()方法中的空引用中獲取一個URI。

+0

我不使用MainActivity中的URI – yossildad

+0

好吧,但是你是否試圖直接或間接地在doInBackground()方法中獲得URI的方案? – arun

+0

不是,它是在嘗試創建CursorLoader時由操作系統完成的 – yossildad

0

好吧,我發現了這個錯誤。在創建片段內的Loader 時,我使用了未初始化的uri。 感謝您的幫助,併爲此感到抱歉。