[英]When I add in content resolver to main activity,my app crashes
Below is error log I am getting下面是我得到的错误日志
E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.android.apppinventory, PID: 14400 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.apppinventory/com.example.android.apppinventory.MainActivity}: java.lang.StringIndexOutOfBoundsException: length=10;
E/AndroidRuntime:致命异常:主进程:com.example.android.apppinventory,PID:14400 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.android.apppinventory/com.example.android.apppinventory.MainActivity }: java.lang.StringIndexOutOfBoundsException: length=10; regionStart=1;
regionStart=1; regionLength=-2 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2581) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2647) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5763) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) Caused by: java.lang.StringIndexOutOfBoundsException: length=10;
regionLength=-2 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2581) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2647) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android .app.ActivityThread$H.handleMessage(ActivityThread.java:1502) 在 android.os.Handler.dispatchMessage(Handler.java:111) 在 android.os.Looper.loop(Looper.java:207) 在 android.app。 ActivityThread.main(ActivityThread.java:5763) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android。 internal.os.ZygoteInit.main(ZygoteInit.java:679) 引起:java.lang.StringIndexOutOfBoundsException:length=10; regionStart=1;
regionStart=1; regionLength=-2 at java.lang.String.startEndAndLength(String.java:298) at java.lang.String.substring(String.java:1087) at android.support.v4.content.FileProvider$SimplePathStrategy.getFileForUri(FileProvider.java:734) at android.support.v4.content.FileProvider.query(FileProvider.java:435) at android.content.ContentProvider.query(ContentProvider.java:1070) at android.content.ContentProvider$Transport.query(ContentProvider.java:249) at android.content.ContentResolver.query(ContentResolver.java:498) at android.content.ContentResolver.query(ContentResolver.java:441) at com.example.android.apppinventory.MainActivity.displayDatabaseInfo(MainActivity.java:69) at com.example.android.apppinventory.MainActivity.onStart(MainActivity.java:45) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1245) at android.app.Activity.performStart(Activity.java:6286) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) at android.app.ActivityThread.handleLaunchActi
regionLength=-2 at java.lang.String.startEndAndLength(String.java:298) at java.lang.String.substring(String.java:1087) at android.support.v4.content.FileProvider$SimplePathStrategy.getFileForUri(FileProvider) .java:734) 在 android.support.v4.content.FileProvider.query(FileProvider.java:435) 在 android.content.ContentProvider.query(ContentProvider.java:1070) 在 android.content.ContentProvider$Transport.query( ContentProvider.java:249) 在 android.content.ContentResolver.query(ContentResolver.java:498) 在 android.content.ContentResolver.query(ContentResolver.java:441) 在 com.example.android.apppinventory.MainActivity.displayDatabaseInfo(MainActivity) .java:69) 在 com.example.android.apppinventory.MainActivity.onStart(MainActivity.java:45) 在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1245) 在 android.app.Activity.performStart(Activity. java:6286) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544) 在 android.app.ActivityThread.handleLaunchActi vity(ActivityThread.java:2647) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502) at android.os.Handler.dispatchMessage(Handler.java:111) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5763) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
vity(ActivityThread.java:2647) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502) at android.os.Handler.dispatchMessage(Handler. java:111) at android.os.Looper.loop(Looper.java:207) at android.app.ActivityThread.main(ActivityThread.java:5763) at java.lang.reflect.Method.invoke(Native Method) at com .android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
This is an inventory app.这是一个库存应用程序。 Earlier I was interacting with the SQLite database and the app worked well but when I added the concept of content resolver the app crashed.Plz help
早些时候我与 SQLite 数据库交互,该应用程序运行良好,但是当我添加内容解析器的概念时,应用程序崩溃了。请帮助
private void displayDatabaseInfo() {
//InventoryDbHelper mDbHelper = new InventoryDbHelper(this);
//SQLiteDatabase db = mDbHelper.getReadableDatabase();
String[] projection = {
InventoryEntry._ID,
InventoryEntry.PRODUCT_NAME,
InventoryEntry.PRODUCT_DESCRIPTION,
InventoryEntry.PRODUCT_PRICE,
InventoryEntry.PRODUCT_QUANTITY,
InventoryEntry.PRODUCT_IMAGE
};
/**Cursor cursor = db.query(InventoryEntry.TABLE_NAME,projection,null,null,null,null,null);**/
Cursor cursor = getContentResolver().query(InventoryEntry.CONTENT_URI,projection,null,null,null);
//Cursor cursor = getContentResolver().query(InventoryEntry.CONTENT_URI,projection,null,null,null);
TextView displayView = (TextView) findViewById(R.id.text_view);
try {
displayView.setText("Number of rows in table are " + cursor.getCount() + "\n\n");
displayView.append(InventoryEntry._ID + "-" + InventoryEntry.PRODUCT_NAME + "\n");
int idColumnIndex = cursor.getColumnIndex(InventoryEntry._ID);
int nameColumnIndex = cursor.getColumnIndex(InventoryEntry.PRODUCT_NAME);
while (cursor.moveToNext()) {
int currentID = cursor.getInt(idColumnIndex);
String currentName = cursor.getString(nameColumnIndex);
displayView.append("\n" + currentID + "-" + currentName);
}
} finally {
cursor.close();
}
}
The problem is you are appending the strings to a text view which is not valid.问题是您将字符串附加到无效的文本视图中。 Instead use StringBuilder for appending strings.
而是使用StringBuilder来附加字符串。 Then afterwards set that string to text view.
然后将该字符串设置为文本视图。 Please refer below code for example.
请参考下面的代码示例。
private void displayDatabaseInfo() {
//InventoryDbHelper mDbHelper = new InventoryDbHelper(this);
//SQLiteDatabase db = mDbHelper.getReadableDatabase();
String[] projection = {
InventoryEntry._ID,
InventoryEntry.PRODUCT_NAME,
InventoryEntry.PRODUCT_DESCRIPTION,
InventoryEntry.PRODUCT_PRICE,
InventoryEntry.PRODUCT_QUANTITY,
InventoryEntry.PRODUCT_IMAGE
};
/**Cursor cursor = db.query(InventoryEntry.TABLE_NAME,projection,null,null,null,null,null);**/
Cursor cursor = getContentResolver().query(InventoryEntry.CONTENT_URI,projection,null,null,null);
//Cursor cursor = getContentResolver().query(InventoryEntry.CONTENT_URI,projection,null,null,null);
TextView displayView = (TextView) findViewById(R.id.text_view);
StringBuilder sb = new StringBuilder("");
try {
sb.append("Number of rows in table are " + cursor.getCount() + "\n\n");
sb.append(InventoryEntry._ID + "-" + InventoryEntry.PRODUCT_NAME + "\n");
int idColumnIndex = cursor.getColumnIndex(InventoryEntry._ID);
int nameColumnIndex = cursor.getColumnIndex(InventoryEntry.PRODUCT_NAME);
while (cursor.moveToNext()) {
int currentID = cursor.getInt(idColumnIndex);
String currentName = cursor.getString(nameColumnIndex);
sb.append("\n" + currentID + "-" + currentName);
}
displayView.setText(sb.toString());
} finally {
cursor.close();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.