Android java.lang.RuntimeException: невозможно запустить действие ComponentInfo - PullRequest
1 голос
/ 09 ноября 2010

Я написал приложение для Android, и до сих пор оно отлично работает, за исключением одного телефона.Это именно тот телефон, который у меня с 2.2 на обоих телефонах, и мой работает отлично.Другой телефон все время закрывается принудительно, но только при открытии действия, которое запрашивает мою базу данных изображений и пытается показать галерею.Всякая деятельность вылетает в одном и том же месте.Сначала я думал, что это было намерение, которое делало это, но одно из действий не имеет намерения, оно открывает изображения под галереей.Это работает на эмуляторе, на моем мото-дроиде и на нескольких других дроидах.Вот код для галереи и мой растровый декодер.Ошибка ниже этого.Если кто-нибудь увидит что-нибудь, что может привести к сбою, я буду очень признателен за помощь.

public void viewimages() {

    String [] proj={ImageProvider._ID, ImageProvider.IMAGE, ImageProvider.TABLENAME,
            ImageProvider.ITEMID, ImageProvider.IMAGEDATE};

    cursor = managedQuery(ImageProvider.CONTENT_URI,
        proj,
        ImageProvider.TABLENAME + "=" + "'" + Tablename + "'"
    + " and " + ImageProvider.ITEMID + "=" + "'" + ID + "'",
        null,
        ImageProvider.IMAGEDATE);

Строка 182 -> column_index = cursor.getColumnIndex (ImageProvider._ID);

    g = (Gallery) findViewById(R.id.gallery);
    g.setAdapter(new ImageAdapter(this));
    g.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            cursor.moveToPosition(position);
            ImageID = cursor.getLong(column_index);
            Intent i = new Intent(LivestockDetails.this, ImageViewer.class);
            i.putExtra("id", ImageID);
            startActivity(i);
        }
    });
}

private Bitmap decodeFile(String file){
    Bitmap b = null;
    //Decode image size
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(file, o);
    int scale = 1;
    if (o.outHeight > IMAGE_MAX_SIZE || o.outWidth > IMAGE_MAX_SIZE) {
        scale = 2 ^ (int) Math.ceil(Math.log(IMAGE_MAX_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5));
    }

    //Decode with inSampleSize 
    BitmapFactory.Options o2 = new BitmapFactory.Options(); 
    o2.inSampleSize = scale; 
    b = BitmapFactory.decodeFile(file, o2); 
    return b; 
}

public class ImageAdapter extends BaseAdapter {
    int mGalleryItemBackground;
    public ImageAdapter(Context c) {
        mContext = c;

        TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
        mGalleryItemBackground = a.getResourceId(
                R.styleable.Gallery1_android_galleryItemBackground, 0);
        a.recycle();
    }

    public int getCount() {
        return cursor.getCount();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView i = new ImageView(mContext);
        if (convertView == null) {

            String [] proj={ImageProvider._ID, ImageProvider.IMAGE, ImageProvider.TABLENAME, 
                    ImageProvider.ITEMID, ImageProvider.IMAGEDATE};

            cursor = managedQuery(ImageProvider.CONTENT_URI,
                proj,
                ImageProvider.TABLENAME + "=" + "'" + Tablename + "'"
                + " and " + ImageProvider.ITEMID + "=" + "'" + ID + "'",
                null,
                ImageProvider.IMAGEDATE + " DESC");

            column_path = cursor.getColumnIndex(ImageProvider.IMAGE);
            column_index = cursor.getColumnIndex(ImageProvider._ID);
            cursor.moveToPosition(position);
            String filename = cursor.getString(column_path);
            java.io.File file = new java.io.File(filename);
            if(!file.exists()) {
                ImageID = cursor.getLong(column_index);
                getContentResolver().delete(ImageProvider.CONTENT_URI,
                        ImageProvider._ID + "=" + ImageID, null);
                Toast.makeText(LivestockDetails.this,
                        "There are missing images.  They have been removed from the database." ,
                        Toast.LENGTH_LONG).show();
                viewimages();
            }
            else {                  
                Bitmap bitmapOrg = null;
                bitmapOrg = decodeFile(filename);

                Matrix matrix = new Matrix();
                matrix.postScale(scale,scale);
                resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,
                        bitmapOrg.getWidth(), bitmapOrg.getHeight(), matrix, true);

                Drawable delete = i.getDrawable();
                if(delete!= null) {
                    ((BitmapDrawable)i.getDrawable()).getBitmap().recycle();
                    i.setImageBitmap(resizedBitmap);
                }
                else {
                    i.setImageBitmap(resizedBitmap);
                }
                i.setScaleType(ImageView.ScaleType.FIT_XY);
                i.setLayoutParams(new Gallery.LayoutParams(240, 180));
                i.setBackgroundResource(mGalleryItemBackground);
            }
        }
        return i;
    }
}

Вот ошибка

java.lang.RuntimeException: Unable to start activity ComponentInfo{myaquarium.logger/myaquarium.logger.LivestockDetails}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at myaquarium.logger.LivestockDetails.viewimages(LivestockDetails.java:182)
at myaquarium.logger.LivestockDetails.onCreate(LivestockDetails.java:71)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
... 11 more

1 Ответ

1 голос
/ 10 ноября 2010

Я наконец понял это. Мой провайдер контента облажался. У меня есть два приложения, одно для моего тестирования и одно для публикации. У меня был провайдер контента для публикации, указывающий на мое тестируемое приложение, поэтому в эмуляторе он работал нормально, поскольку провайдер контента был там, но когда кто-то купил мое приложение, отсутствовал постоянный провайдер. Если бы только сообщение об ошибке дало больше информации. Когда я реплицировал его на своем эмуляторе, удалив все, а затем только установив основное приложение, logcat сказал мне, что провайдер контента не может быть найден. Вот почему он каждый раз падал на курсор.

...