2013-03-26 140 views
-1

喜而点击按钮我的申请与下面的错误消息::获取致命异常

W/dalvikvm(15165): threadid=1: thread exiting with uncaught exception (group=0x40018578) 
E/AndroidRuntime(15165): FATAL EXCEPTION: main 
E/AndroidRuntime(15165): java.lang.NullPointerException 
E/AndroidRuntime(15165): at android.app.WallpaperManager.setBitmap(WallpaperManager.java:501) 
E/AndroidRuntime(15165): at android.app.ContextImpl.setWallpaper(ContextImpl.java:616) 
E/AndroidRuntime(15165): at android.content.ContextWrapper.setWallpaper(ContextWrapper.java:243) 
E/AndroidRuntime(15165): at com.thenewboston.travis.Camera.onClick(Camera.java:47) 
E/AndroidRuntime(15165): at android.view.View.performClick(View.java:2485) 
E/AndroidRuntime(15165): at android.view.View$PerformClick.run(View.java:9080) 
E/AndroidRuntime(15165): at android.os.Handler.handleCallback(Handler.java:587) 
E/AndroidRuntime(15165): at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(15165): at android.os.Looper.loop(Looper.java:130) 
E/AndroidRuntime(15165): at android.app.ActivityThread.main(ActivityThread.java:3687) 
E/AndroidRuntime(15165): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(15165): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(15165): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
E/AndroidRuntime(15165): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
E/AndroidRuntime(15165): at dalvik.system.NativeStart.main(Native Method) 

Camera.java 包com.thenewboston.travis崩溃;

import java.io.IOException; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.ImageView; 

public class Camera extends Activity implements View.OnClickListener{ 

    ImageButton ib; 
    ImageView iv; 
    Button b; 
    Intent i; 
    Bitmap bmp; 
    final static int cameraData = 0; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.photo); 
     initialize(); 
    } 
    private void initialize() { 
     // TODO Auto-generated method stub 

     ib = (ImageButton)findViewById(R.id.imageButton1); 
     iv = (ImageView)findViewById(R.id.imageButton1); 
     b = (Button)findViewById(R.id.button1); 

     b.setOnClickListener(this); 
     ib.setOnClickListener(this); 
    } 
    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch (v.getId()) 
     { 
     case R.id.imageButton1 : 
      try { 
       getApplicationContext().setWallpaper(bmp); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      break; 
     case R.id.button1: 
      i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(i,cameraData); 
      break; 

     } 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 
     if(resultCode == RESULT_OK){ 
      Bundle ext = data.getExtras(); 
      bmp = (Bitmap)ext.get("data"); 
      iv.setImageBitmap(bmp); 


     } 

    } 

} 

回答

1

您正试图获得的ImageView和使用的ImageButton ID相同

ib = (ImageButton)findViewById(R.id.imageButton1); 
iv = (ImageView)findViewById(R.id.imageButton1); 

两者有相同的ID R.id.imageButton1

所以你会得到你的ImageView导致NullPoinerException的NULL。

尝试改变的imageview的

+0

+1好,但是这并不能解决当前的错误。 :(你也引用你自己的吗?) – Sam 2013-03-26 18:52:00

+0

@Sam谢谢,很高兴能从SO – Pragnani 2013-03-26 18:53:29

+0

@Sam得到赞赏!“你也引用你自己吗?”对不起,我还不知道,我对于什么是什么在SO ..如果我做错了,请纠正它 – Pragnani 2013-03-26 18:57:17

1

的ID的logcat的显示bmp是空:

getApplicationContext().setWallpaper(bmp); 

看起来你b之前点击ib。您实例化的唯一位置bmp位于onActivityResult()中,并且只有在用户选择了图像时才如此。您可以将按钮的可见性更改为onActivityResult(),只有在有有效的位图才能使用时才会显示。

也请阅读Pragnani's answer他有很大的观察,尽管它可能不会导致此异常,因为ImageButton的是ImageView的子类。

+1

我认为你应该得到这个答案......他可能错误地接受了我的答案......但答案是+1 – Pragnani 2013-03-26 19:10:16