私はここで他の多くの質問を見てきましたが、どれも私を助けていないようです. ボタンを押してカメラを開くアプリを書いています。それはうまくいきますが、写真を保存しようとするとすぐにクラッシュし、そのエラーが発生します。これまでの私のコードは次のとおりです
public class MainActivity extends Activity {
private int TAKE_PICTURE = 1337;
private Uri outputFileUri;
private int screenHeight;
private int screenWidth;
private ImageView background;
private String ORIGINAL_FILE = "photo.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button take = (Button)findViewById(R.id.take);
Button share = (Button)findViewById(R.id.share);
take.setOnClickListener(new takeInstr(this));
ImageView background = (ImageView)findViewById(R.id.background);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void startCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), ORIGINAL_FILE);
outputFileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TAKE_PICTURE && resultCode != RESULT_CANCELED) {
if (data != null) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
String file = Environment.getExternalStorageDirectory() + "/test.jpg";
BitmapFactory.decodeFile(file, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
DisplayMetrics metrics = this.getResources().getDisplayMetrics();
screenHeight = metrics.heightPixels;
screenWidth = metrics.widthPixels;
int heightRatio = Math.round((float) imageHeight / (float) screenHeight);
int widthRatio = Math.round((float) imageWidth / (float) screenWidth);
options.inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
options.inJustDecodeBounds = false;
background.setImageBitmap(BitmapFactory.decodeFile(file, options));
}
else {
}
}
}
}
package com.example.photoshare;
import android.view.View;
import android.view.View.OnClickListener;
public class takeInstr implements OnClickListener {
private MainActivity mainActivity;
public takeInstr(MainActivity mainActivity) {
this.mainActivity = mainActivity;
}
@Override
public void onClick(View v) {
mainActivity.startCamera();
}
}
`
私のxml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/background"
android:src="@drawable/great_wall"
android:layout_width="fill_parent"
android:scaleType="fitXY"
android:layout_height="fill_parent" />
<LinearLayout
android:id="@+id/buttonLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:gravity="center_horizontal"
android:weightSum="1.0" >
<Button
android:id="@+id/take"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="@string/take" />
<Button
android:id="@+id/share"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="@string/share" />
</LinearLayout>
ここに私のlogcatメッセージがあります
02-18 12:42:56.266: W/dalvikvm(627): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
02-18 12:42:56.357: E/AndroidRuntime(627): FATAL EXCEPTION: main
02-18 12:42:56.357: E/AndroidRuntime(627): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1337, result=-1, data=null} to activity {com.example.photoshare/com.example.photoshare.MainActivity}: java.lang.NullPointerException
02-18 12:42:56.357: E/AndroidRuntime(627): at android.app.ActivityThread.deliverResults(ActivityThread.java:2980)
02-18 12:42:56.357: E/AndroidRuntime(627): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3023)
02-18 12:42:56.357: E/AndroidRuntime(627): at android.app.ActivityThread.access$1100(ActivityThread.java:123)
02-18 12:42:56.357: E/AndroidRuntime(627): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1177)
02-18 12:42:56.357: E/AndroidRuntime(627): at android.os.Handler.dispatchMessage(Handler.java:99)
02-18 12:42:56.357: E/AndroidRuntime(627): at android.os.Looper.loop(Looper.java:137)
02-18 12:42:56.357: E/AndroidRuntime(627): at android.app.ActivityThread.main(ActivityThread.java:4424)
02-18 12:42:56.357: E/AndroidRuntime(627): at java.lang.reflect.Method.invokeNative(Native Method)
02-18 12:42:56.357: E/AndroidRuntime(627): at java.lang.reflect.Method.invoke(Method.java:511)
02-18 12:42:56.357: E/AndroidRuntime(627): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-18 12:42:56.357: E/AndroidRuntime(627): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-18 12:42:56.357: E/AndroidRuntime(627): at dalvik.system.NativeStart.main(Native Method)
02-18 12:42:56.357: E/AndroidRuntime(627): Caused by: java.lang.NullPointerException
02-18 12:42:56.357: E/AndroidRuntime(627): at com.example.photoshare.MainActivity.onActivityResult(MainActivity.java:69)
02-18 12:42:56.357: E/AndroidRuntime(627): at android.app.Activity.dispatchActivityResult(Activity.java:4649)
02-18 12:42:56.357: E/AndroidRuntime(627): at android.app.ActivityThread.deliverResults(ActivityThread.java:2976)
02-18 12:42:56.357: E/AndroidRuntime(627): ... 11 more
02-18 12:42:56.686: I/dalvikvm(627): threadid=3: reacting to signal 3
02-18 12:42:56.726: I/dalvikvm(627): Wrote stack traces to '/data/anr/traces.txt'
02-18 12:42:57.047: I/dalvikvm(627): threadid=3: reacting to signal 3
02-18 12:42:57.086: I/dalvikvm(627): Wrote stack traces to '/data/anr/traces.txt'
02-18 12:42:59.716: I/Process(627): Sending signal. PID: 627 SIG: 9
null が返されたときに何か他のことをする必要があることはわかっていますが、何をすべきか正確にはわかりません。すべての助けをいただければ幸いです。