2013-08-24 33 views
-1

我正在開發手指繪畫應用程序。我有以下代碼從圖庫加載圖片(以繪製它)。代碼在我的智能手機(Android 4.2.2 - API 17)中工作正常。但是當我在較低版本(2.3.3等)上運行它時,它只是顯示運行時錯誤並且應用程序已關閉。圖像庫中加載圖片時出現異常

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


    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) 
     try { 
      // We need to recyle unused bitmaps 
      if (bitmap != null) { 
       bitmap.recycle(); 
      } 
      InputStream stream = getContentResolver().openInputStream(
        data.getData()); 
      myBitmap = BitmapFactory.decodeStream(stream); 
      stream.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

和調用這個

Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    startActivityForResult(intent, REQUEST_CODE); 

在我的理解,這個代碼應工作的所有的API。但是低版本存在一些問題。請幫我

編輯:

(我已刪除的展示代碼,這是造成問題仍然問題仍然存在,這裏是新的logcat點擊LOAD按鈕

08-25 18:55:51.079: D/ActionBarSherlock(524): [callbackOptionsItemSelected] item: Load 
08-25 18:55:51.089: D/ActionBarSherlock(524): [callbackOptionsItemSelected] returning true 
08-25 18:55:51.141: D/PhoneWindow(524): couldn't save which view has focus because the focused view [email protected] has no id. 
08-25 18:55:51.159: D/ActionBarSherlock(524): [dispatchPause] 
08-25 18:55:51.899: D/ActionBarSherlock(524): [dispatchStop] 
08-25 18:55:53.259: D/ActionBarSherlock(524): [dispatchPostResume] 
08-25 18:55:53.379: D/AndroidRuntime(524): Shutting down VM 
08-25 18:55:53.379: W/dalvikvm(524): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
08-25 18:55:53.400: E/AndroidRuntime(524): FATAL EXCEPTION: main 
08-25 18:55:53.400: E/AndroidRuntime(524): java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.graphics.Canvas.<init>(Canvas.java:83) 
08-25 18:55:53.400: E/AndroidRuntime(524): at com.example.colordraw.CanvasActivity$Canvass.onDraw(CanvasActivity.java:780) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.View.draw(View.java:6880) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.View.draw(View.java:6883) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.widget.FrameLayout.draw(FrameLayout.java:357) 
08-25 18:55:53.400: E/AndroidRuntime(524): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewRoot.draw(ViewRoot.java:1522) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.os.Looper.loop(Looper.java:123) 
08-25 18:55:53.400: E/AndroidRuntime(524): at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-25 18:55:53.400: E/AndroidRuntime(524): at java.lang.reflect.Method.invokeNative(Native Method) 
08-25 18:55:53.400: E/AndroidRuntime(524): at java.lang.reflect.Method.invoke(Method.java:507) 
08-25 18:55:53.400: E/AndroidRuntime(524): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-25 18:55:53.400: E/AndroidRuntime(524): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-25 18:55:53.400: E/AndroidRuntime(524): at dalvik.system.NativeStart.main(Native Method) 
08-25 18:55:56.699: I/Process(524): Sending signal. PID: 524 SIG: 9 
+0

post logcat output – alecnash

回答

1

日誌這樣說:

java.lang.NoSuchMethodError: android.view.Display.getSize

這樣,這是有問題的行:

display.getSize(size); 

它只是從API 13支持。

改爲,您可以使用getResources().getDisplayMetrics()

爲了避免出現此類錯誤,您應該使用Lint(該按鈕看起來像一個帶有「V」的複選框)。

+0

謝謝。我已經刪除了顯示代碼。但問題仍然存在。請看看編輯後的問題 – VipulKumar

+0

它完成了...我創建了可變位圖,現在它正在工作...感謝您的努力.... – VipulKumar

+0

如果您需要解碼/轉換爲可變位圖,也許這篇文章會幫助你:http://stackoverflow.com/a/16314940/878126 –

0

顯示後 logcat的。 .getSize(點)的方法是,因爲API級別可用13

+0

我試過並刪除了整套「顯示」代碼。仍然是相同的問題 – VipulKumar

+0

請刪除「顯示」代碼後發佈logcat輸出 – trebron

+0

謝謝。我已經完成了......請看看那個。我認爲這個問題可能與圖像是不可變的位圖 – VipulKumar

相關問題