2011-12-28 9 views
0

У меня возникла проблема, когда я собираюсь сохранить растровое изображение на SDK в формате PNG, тогда код всегда возвращает ошибку, описанную ниже, я не знаю почему? Пожалуйста, предложите мне правильное решение относительно того же.Ошибка при сохранении растрового изображения на SD-карте в android

Ошибка Stack:

12-28 12:50:58.765: ERROR/AndroidRuntime(16977): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.greetingApp.common/com.greetingApp.common.Greeting}: java.lang.NullPointerException 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at android.os.Looper.loop(Looper.java:123) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at dalvik.system.NativeStart.main(Native Method) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977): Caused by: java.lang.NullPointerException 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at com.greetingApp.common.Greeting.SaveData(Greeting.java:138) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at com.greetingApp.common.Greeting.onCreate(Greeting.java:78) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
12-28 12:50:58.765: ERROR/AndroidRuntime(16977):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

Код:

protected void SaveData() 
     { 


      FrameLayout view = (FrameLayout)findViewById(R.id.frameLayout2); 
      view.setDrawingCacheEnabled(true); 
      view.buildDrawingCache(); 
      bm = view.getDrawingCache(); 

      OutputStream outStream = null; 
      File file = new File(extStorageDirectory, "er.PNG"); 
      try { 
      outStream = new FileOutputStream(file); 
      bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
      outStream.flush(); 
      outStream.close(); 

      //Toast.makeText(AndroidWebImage.this, "Saved", Toast.LENGTH_LONG).show(); 

      } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      //Toast.makeText(AndroidWebImage.this, e.toString(), Toast.LENGTH_LONG).show(); 
      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      // Toast.makeText(AndroidWebImage.this, e.toString(), Toast.LENGTH_LONG).show(); 

      // TODO Auto-generated method stub 

     } 

Заранее спасибо

+0

Есть ли у вас какие-либо вопросы Paresh, если не хочу отвечать на вопросы, тогда ни одно тело не заставляет вас делать то же самое. –

+1

Эта строка 138 и сообщение onCreate() также. –

ответ

1

Убедитесь, что вы не имеете нулевой здесь

FrameLayout view = (FrameLayout)findViewById(R.id.frameLayout2); 

Кроме того, его лучше извлечь идентификатор внутри OnCreate и использовать его в SaveData()

FrameLayout view; 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_xml); 
     view = (FrameLayout)findViewById(R.id.frameLayout2); 
} 

Теперь вы можете использовать этот вид экземпляра FrameLayout в вашем SaveData()

+0

Я сделал то же самое, но ошибка остается такой же. –

+0

, на какой строке вы получаете сообщение об ошибке? –

+0

Я не могу получить растровое изображение для желаемого вида. –