Я написал приложение для 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