2012-11-20 45 views
0

我正試圖將其與我的應用程序集成:Capture Image from Camera and Display in ActivityonActivityResult在拍攝照片時返回空指針異常?

當我打開活動時,我正是使用作者寫的東西,我得到一個空指針異常。這裏是logcat的樣子:

11-20 15:03:13.178: D/AndroidRuntime(15052): Shutting down VM 
11-20 15:03:13.178: W/dalvikvm(15052): threadid=1: thread exiting with uncaught exception (group=0x400259f8) 
11-20 15:03:13.189: E/AndroidRuntime(15052): FATAL EXCEPTION: main 
11-20 15:03:13.189: E/AndroidRuntime(15052): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dummies.android.taskreminder/com.dummies.android.taskreminder.activity.UsersThoughts}: java.lang.ClassCastException: android.widget.Button 
11-20 15:03:13.189: E/AndroidRuntime(15052): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787) 
11-20 15:03:13.189: E/AndroidRuntime(15052): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803) 

於是,我就改變了一點,現在每當我回到我的活動從拍攝照片,我得到一個空指針異常,當我使用此配置:

//in oncreate  
this.imageView = new ImageView(this); 
this.imageView = (ImageView) this.imageView.findViewById(R.id.camera_thought); 


//method in class file 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) { 
     Bitmap photo = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(photo); 
    } 
} 

以下是錯誤的樣子:

11-20 14:53:39.118: D/AndroidRuntime(14931): Shutting down VM 
11-20 14:53:39.118: W/dalvikvm(14931): threadid=1: thread exiting with uncaught exception (group=0x400259f8) 
11-20 14:53:39.128: E/AndroidRuntime(14931): FATAL EXCEPTION: main 
11-20 14:53:39.128: E/AndroidRuntime(14931): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=Intent { act=inline-data dat=content://media/external/images/media/89 (has extras) }} to activity {com.dummies.android.taskreminder/com.dummies.android.taskreminder.activity.UsersThoughts}: java.lang.NullPointerException 
11-20 14:53:39.128: E/AndroidRuntime(14931): at android.app.ActivityThread.deliverResults(ActivityThread.java:3734) 

回答

1

的問題是,imageViewnullonCreate()滿足之後HOD。

看起來你在分配它時混合了一些不同的約定。通常,在擴充佈局文件時使用調用findViewById()。你可能有某種佈局,形式R.layout.my_layout的東西,所以嘗試調用setContentView()第一,然後找到ImageView

setContentView(R.layout.my_layout) 
this.imageView = (ImageView)findViewById(R.id.camera_thought); 
+0

嗯,我在嘗試定義imageview之前調用setContentView。它仍然給我一個空指針異常。 : -/ – Stagleton

+0

確保您的佈局具有帶有屬性「android:id =」@ + id/camera_thought「'的ImageView。 – wsanville

+0

是的,我有這個在我的佈局: Stagleton

0

我不明白這一點:

this.imageView = new ImageView(this); 
this.imageView = (ImageView) this.imageView.findViewById(R.id.camera_thought); 

第一行創建一個全新的ImageView不包含任何內容。第二行嘗試獲取第一個ImageView(?)中的ImageView。

如果你想顯示XML聲明的ImageView的,程序是這樣的:

//this actually refers to the activity 
this.imageView = (ImageView) this.findViewById(R.id.camera_thought); 

如果你想以編程方式創建它:但是

this.imageView = new ImageView(this); 

,使用該ImageView的,你需要將其設置爲活動的內容視圖,或將其添加到作爲活動內容視圖的ViewGroup。

setContentVIew(imageView); 

viewGroup.addView(imageView); 
setContentView(viewGroup); 
0

我爲您提供完整的類,這樣做是這樣的:

public class CameraActivity extends Activity { 

私有靜態最終詮釋CAMERA_PIC_REQUEST = 2500;

@Override 
public void onCreate(Bundle savedInstanceState) {   
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

    Button b = (Button)findViewById(R.id.CamOpen); 
     b.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 
      } 
     }); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_PIC_REQUEST) { 
      Bitmap image = null; 
      try{ 
      image = (Bitmap) data.getExtras().get("data"); 
      } 

      catch(Exception e){} 
     ImageView imageview = (ImageView) findViewById(R.id.ImageView); 
      imageview.setImageBitmap(image); 
    } 

    super.onActivityResult(requestCode, resultCode, data); 
} 
} 

其中「main」是應該包含按鈕「b」和ImageView「圖像」的xml文件。

+0

嗯,在這一個我得到一個類轉換異常:android.widget.Button,當返回到活動 – Stagleton