我的很多用户在实例化内容描述符时都面临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;
}
}
如果您需要任何进一步的信息,请与我们联系。任何人都可以为我提供一些可见性。我终于无法重现崩溃了。
修改
Guys停止将其刷入任何其他NPE类别而不进行阅读。它可以在很多设备上运行而不会出现问题。初始化参数是常数。崩溃的行也在代码中被注释。
答案 0 :(得分:1)
您的AUTHORITY,PATH和PATH_TOKEN(所有这些)的价值是什么?应用程序在您的应用上运行的值和Android版本可能属于bug fixed in UriMatcher。我想这是你想要开始挖掘的地方。另外,您是否从开发人员控制台或某些bug报告库中收到了错误报告?如果是,Android版本的报告有什么共同之处?它可能有助于重现失败。或者获得大量运行在不同版本上的设备/模拟器并尝试手动获取它。