2012-06-16 40 views
1

我是Android開發的新手,並且正在玩弄相機。我只是想創建一個簡單的應用程序,使用本機相機應用程序拍攝照片,並將該圖像的文件路徑還給我。簡單的Android相機應用 - 旋轉導致NullPointerException

我的工作很好,但我遇到了一個奇怪的錯誤。當我點擊按鈕啓動相機時,如果我在相機應用程序中更改了屏幕的方向,並且在退出相機之前切換不了(當我被問及是否要重新拍攝時按下完成按鈕或不),它會導致引發NullPointerException。

我在這裏有點損失,以至於如何計算出來,所以任何信息都會有幫助!

這裏是我的代碼至今:

package com.CameraTest; 

import android.app.Activity; 
import android.content.ContentValues; 
import android.content.Intent; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class CameraTestActivity extends Activity 
{ 
    private static final int CAMERA_PIC_REQUEST = 1234; 
    protected Uri mCapturedImageURI; 
    protected TextView textview; 
    protected Button button; 

    /** Called when the activity is first created. */ 
    @Override public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     button = (Button) findViewById(R.id.button1); 
     textview = (TextView) findViewById(R.id.textView1); 

     if (savedInstanceState != null) { 
      textview.setText(savedInstanceState.getString("textview")); 
     } 

     button.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View view) 
      {    
       String fileName = "temp.jpg"; 
       ContentValues values = new ContentValues(); 
       values.put(MediaStore.Images.Media.TITLE, fileName); 
       mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 
       startActivityForResult(intent, CAMERA_PIC_REQUEST); 
      } 
     }); 
    } 

    @Override protected void onSaveInstanceState(Bundle outState) 
    { 
     super.onSaveInstanceState(outState); 

     outState.putString("textview", textview.getText().toString()); 
    } 

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

     if (requestCode == CAMERA_PIC_REQUEST && resultCode == -1) 
     { 
      String[] projection = { MediaStore.Images.Media.DATA}; 
      Cursor cursor = managedQuery(this.mCapturedImageURI, projection, null, null, null); 
      int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      String capturedImageFilePath = cursor.getString(column_index_data); 
      this.textview.setText("File Path:" + capturedImageFilePath); 
     } 
    }  
} 
+2

請發佈sta cktrace –

+0

是的,logcat錯誤告訴你一個NullPointerException的確切的一行,並保存其他寶貴的信息。 – Sam

回答

2

你必須改變你的清單文件在您的清單

只是你的代碼替換下面的代碼

<activity android:name=".CameraTestActivity" 
       android:label="@string/app_name" android:configChanges="keyboardHidden|orientation"> 

<activity android:name=".CameraTestActivity" 
       android:label="@string/app_name"> 
+0

這個伎倆!謝謝! – Richard

+0

歡迎來到理查德。 – rajpara