0

以下にコメントした次の行で NullPointerException を取得しています。
時々私はそれを手に入れます(特に最初のインスタンスで)、時にはそうではありません。だから私はこれを一度だけ解決しようとしています。
画像データベースからファイル パスを取得し、ビットマップ デコードを使用します。データベースに値があると確信しています。

ありがとうございました。

        ImageDB imagedb = new ImageDB(this);    
        imagedb.open();

        ArrayList<String> image_list = new ArrayList<String>();
        image_list.clear();

            if(imagedb.open() != null){
            Cursor tagcursor = imagedb.retrieveTag(tag);

             if(tagcursor.moveToFirst()){
                do{
                    image_list.add(tagcursor.getString(tagcursor.getColumnIndex(tag)));

                }       
                while(tagcursor.moveToNext());

                }

             tagcursor.close();
           imagedb.close();
            }


                if(image_list != null && !image_list.isEmpty()){ 
            Collections.shuffle(image_list);

    if(image_list.get(0).toString() != null){ // nullpointerexception here or below if I comment here

                imagepath = image_list.get(0).toString(); 
            }

        }

これはスタック トレースですが、これは単なる警告であり、プログラムは引き続き実行されます。

04-16 19:03:31.603: W/System.err(1355): java.lang.NullPointerException
04-16 19:03:31.613: W/System.err(1355):     at com.MucaaApps.imageUpdate.ImageService.setTag(ImageService.java:422)
04-16 19:03:31.613: W/System.err(1355):     at com.MucaaApps.ImageUpdate.imageService.setImageIcon(ImageService.java:377)
04-16 19:03:31.623: W/System.err(1355):     at com.MucaaApps.ImageUpdate.ImageService.onStart(ImageService.java:237)
04-16 19:03:31.623: W/System.err(1355):     at android.app.Service.onStartCommand(Service.java:306)
04-16 19:03:21.552: W/System.err(1355):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2873)
04-16 19:03:21.552: W/System.err(1355):     at android.app.ActivityThread.access$3500(ActivityThread.java:119)
04-16 19:03:21.552: W/System.err(1355):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
04-16 19:03:21.552: W/System.err(1355):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 19:03:21.552: W/System.err(1355):     at android.os.Looper.loop(Looper.java:123)
04-16 19:03:21.552: W/System.err(1355):     at android.app.ActivityThread.main(ActivityThread.java:4363)
04-16 19:03:21.563: W/System.err(1355):     at java.lang.reflect.Method.invokeNative(Native Method)
04-16 19:03:21.563: W/System.err(1355):     at java.lang.reflect.Method.invoke(Method.java:521)
04-16 19:03:21.573: W/System.err(1355):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
04-16 19:03:21.573: W/System.err(1355):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
04-16 19:03:21.582: W/System.err(1355):     at dalvik.system.NativeStart.main(Native Method)
4

2 に答える 2

1

簡単な答え。値 null を ArrayList に追加しました。

次のように修正できます。

ImageDB imagedb = new ImageDB(this);
        imagedb.open();
        ArrayList<String> image_list = new ArrayList<String>();
        image_list.clear();

        if (imagedb.open() != null) {
            Cursor tagcursor = imagedb.retrieveTag(tag);

            if (tagcursor.moveToFirst()) {
                        final int index = tagcursor.getColumnIndex(tag)
                do {
                    final String val = tagcursor.getString(index);
                    if (val!=null){
                        image_list.add(val);
                    }

                } while (tagcursor.moveToNext());

            }

            tagcursor.close();
            imagedb.close();
        }

        if (image_list != null && !image_list.isEmpty()) {
            Collections.shuffle(image_list);

            if (image_list.get(0).toString() != null) { // nullpointerexception
                                                        // here or below if i
                                                        // comment here

                imagepath = image_list.get(0).toString();
            }

        }
于 2012-04-16T19:51:07.280 に答える
0

リストをシャッフルしています。したがって、ファイルパスの1つがnullであり、nullポインターにつながる最初の位置にランダムにシャッフルされると思います。

ここで確認できます

String filePath = tagcursor.getColumnIndex(tag);
if (filepath == null || filepath.isEmpty()) [
  //get additional info from cursor ..row id etc to debug
} else {
  image_list.add(filepath);
}
于 2012-04-16T19:49:21.930 に答える