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; 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; 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 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)
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
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. 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();
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.