2013-04-05 143 views
0

我無法找到無法恢復活動的問題的根本原因。我做錯了我的應用程序去碰撞一次,我從畫廊做挑之間隨機選擇,並從相機:(無法恢復活動後,從畫廊中選擇和從相機中選擇

編輯挑選:全logcat的:

04-05 12:30:07.479: W/IInputConnectionWrapper(17228): showStatusIcon on inactive InputConnection 
04-05 12:30:17.109: I/RotateImage(17228): Exif orientation: 6 
04-05 12:30:17.109: I/RotateImage(17228): Rotate value: 90 
04-05 12:30:20.139: E/Swiss Insignia(17228): width=1920 
04-05 12:30:20.139: E/Swiss Insignia(17228): height=2560 
04-05 12:30:21.609: I/System.out(17228): [email protected]** 
04-05 12:30:31.229: I/RotateImage(17228): Exif orientation: 6 
04-05 12:30:31.229: I/RotateImage(17228): Rotate value: 90 
04-05 12:30:33.949: E/Swiss Insignia(17228): width=1920 
04-05 12:30:33.949: E/Swiss Insignia(17228): height=2560 
04-05 12:30:35.089: I/System.out(17228): [email protected]** 
04-05 12:30:37.909: W/IInputConnectionWrapper(17228): showStatusIcon on inactive InputConnection 
04-05 12:30:45.829: I/Swiss Insignia(17456): Trying to load OpenCV library 
04-05 12:30:45.889: D/SKIA_FONT(17456): load_system_fonts(), name = Roboto, style = 0, uniqueID = 1 
04-05 12:30:45.889: D/SKIA_FONT(17456): load_system_fonts(), name = Roboto, style = 1, uniqueID = 2 
04-05 12:30:45.889: D/SKIA_FONT(17456): load_system_fonts(), name = Droid Serif, style = 0, uniqueID = 3 
04-05 12:30:45.889: D/SKIA_FONT(17456): load_system_fonts(), name = Droid Serif, style = 1, uniqueID = 4 
04-05 12:30:45.889: D/SKIA_FONT(17456): load_system_fonts(), name = Droid Serif, style = 2, uniqueID = 5 
04-05 12:30:45.899: D/SKIA_FONT(17456): load_system_fonts(), name = Droid Serif, style = 3, uniqueID = 6 
04-05 12:30:45.899: D/SKIA_FONT(17456): load_system_fonts(), name = Droid Sans Mono, style = 0, uniqueID = 7 
04-05 12:30:45.909: D/SKIA_FONT(17456): load_system_fonts(), name = Droid Sans Arabic, style = 0, uniqueID = 8 
04-05 12:30:45.909: D/SKIA_FONT(17456): load_system_fonts(), name = Droid Sans Hebrew, style = 0, uniqueID = 9 
04-05 12:30:45.909: D/SKIA_FONT(17456): load_system_fonts(), name = SamsungArmenian, style = 0, uniqueID = 10 
04-05 12:30:45.909: D/SKIA_FONT(17456): load_system_fonts(), name = SamsungGeorgian, style = 0, uniqueID = 11 
04-05 12:30:45.909: D/SKIA_FONT(17456): load_system_fonts(), name = Droid Sans Thai, style = 0, uniqueID = 12 
04-05 12:30:45.909: D/SKIA_FONT(17456): load_system_fonts(), name = HelveM_Telugu, style = 0, uniqueID = 13 
04-05 12:30:45.909: D/SKIA_FONT(17456): load_system_fonts(), name = Droid Sans Fallback, style = 0, uniqueID = 14 
04-05 12:30:45.919: D/SKIA_FONT(17456): load_system_fonts(), oldSansUID = 0, newSansUID = 1 
04-05 12:30:45.919: D/SKIA_FONT(17456): load_system_fonts(), oldSansBoldUID = 0, newSansBoldUID = 2 
04-05 12:30:45.969: W/dalvikvm(17456): threadid=1: thread exiting with uncaught exception (group=0x40018578) 
04-05 12:30:45.989: E/AndroidRuntime(17456): FATAL EXCEPTION: main 
04-05 12:30:45.989: E/AndroidRuntime(17456): java.lang.RuntimeException: Unable to resume activity {.MainActivity}: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {.MainActivity}: java.lang.NullPointerException 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1672) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.os.Looper.loop(Looper.java:130) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.ActivityThread.main(ActivityThread.java:3687) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at java.lang.reflect.Method.invokeNative(Native Method) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at java.lang.reflect.Method.invoke(Method.java:507) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at dalvik.system.NativeStart.main(Native Method) 
04-05 12:30:45.989: E/AndroidRuntime(17456): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {.MainActivity}: java.lang.NullPointerException 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.ActivityThread.deliverResults(ActivityThread.java:2536) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2111) 
04-05 12:30:45.989: E/AndroidRuntime(17456): ... 12 more 
04-05 12:30:45.989: E/AndroidRuntime(17456): Caused by: java.lang.NullPointerException 
04-05 12:30:45.989: E/AndroidRuntime(17456): at .onActivityResult(MainActivity.java:101) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
04-05 12:30:45.989: E/AndroidRuntime(17456): at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
04-05 12:30:45.989: E/AndroidRuntime(17456): ... 13 more 

代碼:

public class MainActivity extends Activity 
{ 
private static final int PICK_FROM_CAMERA = 1; 
private static final int PICK_FROM_GALLERY = 2; 
final String TAG = "Swiss Insignia"; 
ImageView imgview; 
TextView output; 
Button buttonCamera; 
Button buttonGallery; 
File destImage; 
private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) 
{@Override 
    public void onManagerConnected(int status) 
    { 
     switch (status) 
     { 
      case LoaderCallbackInterface.SUCCESS: 
      { 
       Log.i(TAG, "opencv loaded successfully"); 
       // Create and set View 
       System.loadLibrary("SwissInsignia"); 
       Log.i(TAG, "libSwissInsignia.so loaded successfully"); 
      } break; 
      default: 
      { 
       super.onManagerConnected(status); 
      } break; 
     } 
    } 
};@Override 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    Log.i(TAG, "Trying to load OpenCV library"); 
    if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_2, this, mOpenCVCallBack)) 
    { 
     Log.e(TAG, "Cannot connect to OpenCV Manager"); 
    } 
    setContentView(R.layout.activity_main); 
    imgview = (ImageView) findViewById(R.id.imageView1); 
    output = (TextView)findViewById(R.id.textViewOutput); 
    buttonCamera = (Button) findViewById(R.id.btn_take_camera); 
    buttonGallery = (Button) findViewById(R.id.btn_select_gallery); 
    buttonCamera.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "SwissInsignia"); 
      if (!dir.isDirectory()) 
      { 
       dir.mkdir(); 
      } 
      destImage = new File(dir, new Date().getTime() + ".jpg"); 
      intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(destImage)); 
      startActivityForResult(intent, PICK_FROM_CAMERA); 
     } 
    }); 
    buttonGallery.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
      photoPickerIntent.setType("image/*"); 
      startActivityForResult(photoPickerIntent, PICK_FROM_GALLERY); 
     } 
    }); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (requestCode == PICK_FROM_CAMERA) 
    { 
      File f = new File(destImage.getAbsolutePath()); 
      int rotateImage = getCameraPhotoOrientation(this, Uri.parse(destImage.getAbsolutePath()), destImage.getAbsolutePath()); 
      Bitmap photo= convertBitmapToCorrectOrientation(BitmapFactory.decodeFile(f.getAbsolutePath()), rotateImage); 
      //Bitmap photo = BitmapFactory.decodeFile(f.getAbsolutePath()); 
      Log.e(TAG, "width="+photo.getWidth()); 
      Log.e(TAG, "height="+photo.getHeight()); 
      Mat mRgba=new Mat(); 
      org.opencv.android.Utils.bitmapToMat(photo,mRgba); 
      String str1=findFeatures(mRgba.getNativeObjAddr()); 
      System.out.println("str1="+str1); 
      imgview.setImageBitmap(photo); 
      output.setText("Detected Pattern="+str1); 
    } 
    if (requestCode == PICK_FROM_GALLERY) 
    { 
     Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null); 
     cursor.moveToFirst(); 
     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     cursor.close(); 
     int rotateImage = getCameraPhotoOrientation(this, selectedImage, picturePath); 
     Bitmap photo= convertBitmapToCorrectOrientation(BitmapFactory.decodeFile(picturePath), rotateImage); 
     Log.e(TAG, "width="+photo.getWidth()); 
     Log.e(TAG, "height="+photo.getHeight()); 
     Mat mRgba=new Mat(); 
     org.opencv.android.Utils.bitmapToMat(photo,mRgba); 
     String str2=findFeatures(mRgba.getNativeObjAddr()); 
     System.out.println("str2="+str2); 
     Bitmap mutableBitmap = photo.copy(Bitmap.Config.ARGB_8888, true); 
     imgview.setImageBitmap(mutableBitmap); 
     output.setText("Detected Pattern="+str2); 
    } 
} 

public static Bitmap convertBitmapToCorrectOrientation(Bitmap photo,int rotation) 
{ 
    int width = photo.getWidth(); 
    int height = photo.getHeight(); 
    Matrix matrix = new Matrix(); 
    matrix.preRotate(rotation); 
    return Bitmap.createBitmap(photo, 0, 0, width, height, matrix, false); 
} 
public int getCameraPhotoOrientation(Context context, Uri imageUri, String imagePath) 
{ 
    int rotate = 0; 
    try 
    { 
     context.getContentResolver().notifyChange(imageUri, null); 
     File imageFile = new File(imagePath); 
     ExifInterface exif = new ExifInterface(imageFile.getAbsolutePath()); 
     int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 
     switch (orientation) 
     { 
      case ExifInterface.ORIENTATION_ROTATE_270: 
       rotate = 270; 
      break; 
      case ExifInterface.ORIENTATION_ROTATE_180: 
       rotate = 180; 
      break; 
      case ExifInterface.ORIENTATION_ROTATE_90: 
       rotate = 90; 
      break; 
     } 
     Log.i("RotateImage", "Exif orientation: " + orientation); 
     Log.i("RotateImage", "Rotate value: " + rotate); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return rotate; 
} 

    public static native String findFeatures(long matAddrRgba); 
} 
+0

請張貼滿logcat的...... – 2013-04-05 07:15:38

+0

東西正在空...張貼滿logcat的。 – 2013-04-05 07:18:05

+0

什麼是第101行?... – 2013-04-05 07:30:18

回答

0

的問題很簡單當你從相機回來時,你的活動正在重新啓動,這是因爲相機使用了大量資源來工作,因此destImage將爲空

所以使用上onSaveInstanceState到的onCreate從捆綁savedInstanceState保存的變量這些國王和恢復它們

OR

使用

destImage = new File(dir, "sample.jpg"); 

onCreate(),而不是在onClick()

編輯

還檢查結果是正確的resultCode爲== RESULT_OK

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 

     if(resultCode== RESULT_OK) 
     { 
     if (requestCode == PICK_FROM_CAMERA) 
     { 
       File f = new File(destImage.getAbsolutePath()); 
       int rotateImage = getCameraPhotoOrientation(this, Uri.parse(destImage.getAbsolutePath()), destImage.getAbsolutePath()); 
       Bitmap photo= convertBitmapToCorrectOrientation(BitmapFactory.decodeFile(f.getAbsolutePath()), rotateImage); 
       //Bitmap photo = BitmapFactory.decodeFile(f.getAbsolutePath()); 
       Log.e(TAG, "width="+photo.getWidth()); 
       Log.e(TAG, "height="+photo.getHeight()); 


       imgview.setImageBitmap(photo); 
       output.setText("Detected Pattern="); 
     } 
     if (requestCode == PICK_FROM_GALLERY) 
     { 
      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null); 
      cursor.moveToFirst(); 
      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String picturePath = cursor.getString(columnIndex); 
      cursor.close(); 
      int rotateImage = getCameraPhotoOrientation(this, selectedImage, picturePath); 
      Bitmap photo= convertBitmapToCorrectOrientation(BitmapFactory.decodeFile(picturePath), rotateImage); 
      Log.e(TAG, "width="+photo.getWidth()); 
      Log.e(TAG, "height="+photo.getHeight()); 

      Bitmap mutableBitmap = photo.copy(Bitmap.Config.ARGB_8888, true); 
      imgview.setImageBitmap(mutableBitmap); 
      output.setText("Detected Pattern="); 
     } 
     } 
    } 
+0

即使在調用destImage = new File(dir,「sample.jpg」)後仍然存在問題;在onCreate()而不是onClick():(: – 2013-04-05 08:20:45

+0

嘿,很開心:-)編輯後檢查它 – 2013-04-05 09:02:49