简体   繁体   English

当我将内容解析器添加到主要活动时,我的应用程序崩溃

[英]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.

相关问题 我的主要活动是使用gridview,但是在更改设备方向后点击网格图像时,应用程序崩溃 - I have a gridview in my main activity but the app crashes when i tap an image of the grid after device orientation is changed 当我在 android 应用程序上添加启动画面时,应用程序崩溃 - when i add a splash screen on my android app the app crashes 打开tablayout活动时我的应用程序崩溃 - My app crashes when opening tablayout activity 当我将Fragment添加到XML时,我的Android应用崩溃 - My Android App Crashes down when i add Fragment to XML 当我尝试重新创建 Activity 时,应用程序崩溃 - When I try to recreate an Activity the app crashes 当我在 Activity 中调用构造函数时应用程序崩溃 - App crashes when I call a constructor in an Activity 当我长按我的应用程序时如何添加活动? - How to add activity when i long press my app? 当我打开游戏活动时,我的应用程序不断崩溃。 我试图创建一个从主要活动打开的游戏活动 - My app keeps crashing when I Open the Game Activity. I tried to create a game activity to be opened from the main activity 当我在主活动布局中添加片段并添加它的代码时,应用程序崩溃了 - App is crashing when I add fragment in main activity layout and add code of it 当我单击该按钮时,我的应用程序崩溃,这将带我进入Java,Android Studio上的另一个活动 - My app crashes when I clicked the button which will take me the another Activity on Java, Android Studio
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM