1

很多我的用戶在實例化內容描述符時面臨NullPointerException問題。ContentDescriptor在實例化時拋出NullPointerException

Fatal Exception: java.lang.NullPointerException: Attempt to read from field 'java.lang.String android.content.UriMatcher.mText' on a null object reference 
     at android.content.UriMatcher.addURI(UriMatcher.java:186) 
     at com.getsuperapp.chat.db.ContentDescriptor.getUriMatcher(SourceFile:25) 
     at com.getsuperapp.chat.db.DatabaseProvider.query(SourceFile:33) 
     at android.content.ContentProvider.query(ContentProvider.java:1017) 
     at android.content.ContentProvider$Transport.query(ContentProvider.java:238) 
     at android.content.ContentResolver.query(ContentResolver.java:497) 
     at android.content.ContentResolver.query(ContentResolver.java:439) 

該組設備和環境可以找到here

的ContentDescriptor文件

/** 
* A few constants from other classes used in the file 
* 
* from UserTable.java 
* public static final String PATH = "user_table"; 
* public static final int PATH_TOKEN = 10; 
*/ 
public class ContentDescriptor { 

    private static UriMatcher URI_MATCHER = null; 
    private static Uri BASE_URI = null; 

    public static UriMatcher getUriMatcher(Context appContext) { 

     String AUTHORITY = appContext.getPackageName() + ".quickblox"; 

     if (URI_MATCHER == null) { 
      URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH); 
//The line below is throwing the exception. 
      URI_MATCHER.addURI(AUTHORITY, UserTable.PATH, UserTable.PATH_TOKEN); 
      URI_MATCHER.addURI(AUTHORITY, DialogTable.PATH, DialogTable.PATH_TOKEN); 
      URI_MATCHER.addURI(AUTHORITY, MessageTable.PATH, MessageTable.PATH_TOKEN); 
      URI_MATCHER.addURI(AUTHORITY, ChatInfoTable.PATH, ChatInfoTable.PATH_TOKEN); 
     } 
     return URI_MATCHER; 
    } 

    public static Uri getBaseUri(Context appContext) { 
     String AUTHORITY = appContext.getPackageName() + ".quickblox"; 
     if (BASE_URI == null) { 
      BASE_URI = Uri.parse("content://" + AUTHORITY); 
     } 
     return BASE_URI; 
    } 

} 

讓我知道如果你需要任何進一步的信息。任何人都可以提供一些這方面的知名度。我無法在我的最後重現崩潰。

編輯

傢伙停止塗刷成其他NPE類別此不讀。它運行在很多設備上沒有麻煩。初始化參數是常數。代碼中也會對其崩潰的行進行註釋。

+0

可能重複[什麼是NullPointerException,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-doi-i-fix - ) – Jens

+0

謝謝,但它不是真的。這個問題隱藏在aosp的內容描述符中。我想深入瞭解爲什麼會發生這種情況。如果您需要閱讀代碼,則實例化將傳遞常量,所以問題與輸入無關。 – humblerookie

+0

模型類中的一個靜態字段(PATH或PATH_TOKEN)將爲空。確保他們沒有任何修改。此外,您可能想要爲這些字段使用getters/setters。 – Shaishav

回答

1

你的AUTHORITY,PATHs和PATH_TOKENs(所有這些值)是什麼值?根據應用的價值和Android版本,您的應用可能會落入bug fixed in UriMatcher。我想這是你想開始挖掘的地方。另外,你是否收到了開發者控制檯或bug報告庫的一個bug?如果是的話,Android版本有哪些共同的報告?這可能有助於重現失敗。或者獲得大量運行在不同版本上的設備/模擬器,並嘗試手動獲取它。

+0

這裏是我所有路徑令牌的鏈接。 http://pastie.org/private/f3pzxsjh331kgiciaa2vw 我使用Fabric進行崩潰日誌記錄,並且崩潰發生在各種設備上,最近它也發生在Nexus 5上 http://crashes.to/s/ 3297e6797ca。 我曾經爲此提出過谷歌的一個問題,但它還沒有被分配。 https://code.google.com/p/android/issues/detail?id=216791 – humblerookie

+0

不幸的是沒有什麼共同點。它發生在各種設備上,從棒棒糖到棉花糖(從5.0.1到6.0.1)。一個感謝鏈接的狗屎負載,幫助我開始:) – humblerookie

+0

我不認爲這種修復會對我有用,因爲我的路徑中沒有'\'字符 – humblerookie

相關問題