【发布时间】:2014-03-13 07:12:27
【问题描述】:
每次我用相机拍照时,都会将 selectedImageUri 设置为 null...
另外,DATA IS NOT NULL 和 ACTION IS NOT NULL 被调用,因为我的困惑......我不确定我是否做错了什么让我知道,拍照时 selectedImageUri 应该返回为 Uri 和不为空
这是我的代码:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == getActivity().RESULT_OK) {
if (requestCode == YOUR_SELECT_PICTURE_REQUEST_CODE) {
final boolean isCamera;
if (data == null) {
Log.e("data", "DATA IS NULL");
isCamera = true;
} else {
Log.e("data", "DATA IS NOT NULL");
final String action = data.getAction();
//Log.e("PICTURE PATH?", action);
if (action == null) {
Log.e("data", "ACTION IS NULL");
isCamera = false;
} else {
Log.e("data", "ACTION IS NOT NULL");
isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
}
}
Uri selectedImageUri;
if (isCamera) {
selectedImageUri = outputFileUri;
String uploadurl = "discover/p";
File photoSelected = new File(selectedImageUri.getPath());
TypedFile photo = new TypedFile("application/octet-stream", photoSelected);
String userId = "userId1";
Callback cameraResponse = new Callback() {
@Override
public void success(Object o, Response response) {
}
@Override
public void failure(RetrofitError retrofitError) {
Log.e("TAG", retrofitError.getMessage());
}
};
uploadImage(uploadurl, photo, userId, cameraResponse);
Picasso.with(getActivity()).load(selectedImageUri.getPath()).into(profilePicture);
} else {
if (data == null) {
selectedImageUri = null;
} else {
selectedImageUri = data.getData();
Log.e("gallery image", "link is " + data.getData());
String uploadurl = "discover/p";
File photoSelected = new File(String.valueOf(selectedImageUri));
TypedFile photo = new TypedFile("application/octet-stream", photoSelected);
String userId = "userId1";
Callback galleryResponse = new Callback() {
@Override
public void success(Object o, Response response) {
}
@Override
public void failure(RetrofitError retrofitError) {
}
};
uploadImage(uploadurl, photo, userId, galleryResponse);
Picasso.with(getActivity()).load(selectedImageUri).into(profilePicture);
}
}
}
}
}
编辑包括相机代码:
if(isDeviceSupportCamera()) {
// Determine Uri of camera image to save.
final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyDir" + File.separator);
root.mkdirs();
final String fname = getUniqueImageFilename();
final File sdImageMainDirectory = new File(root, fname);
outputFileUri = Uri.fromFile(sdImageMainDirectory);
Log.e("is camera ", "even getting CALLED CAM1111?");
// Camera.
final List<Intent> cameraIntents = new ArrayList<Intent>();
Log.e("is camera ", "even getting CALLED CAM?222");
final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final PackageManager packageManager = getActivity().getPackageManager();
final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
Log.e("is camera ", "even getting CALLED CAM333?");
for (ResolveInfo res : listCam) {
Log.e("is camera ", "even getting CALLED CAM4444?");
final String packageName = res.activityInfo.packageName;
final Intent intent = new Intent(captureIntent);
intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
intent.setPackage(packageName);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
cameraIntents.add(intent);
}
Log.e("is camera ", "even getting CALLED CAM?5555");
final Intent chooserCameraIntent = Intent.createChooser(captureIntent, "Use Camera");
startActivityForResult(chooserCameraIntent, YOUR_SELECT_PICTURE_REQUEST_CODE);
} else {
Toast.makeText(getActivity(), "There is no camera available on this device.", Toast.LENGTH_SHORT).show();
}
}
更新
日志文件:
03-12 10:20:21.854 27814-27814/com.example.app E/data﹕ CAMERA IS NOT NULL outputfileuri is file:///storage/emulated/0/MyDir/img_userID1%20_1394612413661.jpg
03-12 10:20:21.854 27814-27814/com.example.app E/data﹕ camera link for selectedImageUri file:///storage/emulated/0/MyDir/img_userID1%20_1394612413661.jpg
03-12 10:20:21.854 27814-27814/com.example.app E/data﹕ selected image get path link is /storage/emulated/0/MyDir/img_userID1 _1394612413661.jpg
我还为 isCamera 添加了 true 而不是
action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
如果我在我的 if 请求代码下添加此代码
if (resultCode == getActivity().RESULT_OK) {
if (requestCode == YOUR_SELECT_PICTURE_REQUEST_CODE) {
// Bundle extras = data.getExtras();
// Bitmap imageBitmap = (Bitmap) extras.get("data");
// profilePicture.setImageBitmap(imageBitmap);
final boolean isCamera;
它实际上在图像视图中显示图像......所以我很困惑为什么它没有正确获取 uri。
这是 android manifest 权限
<!-- For Camera use and downloading image -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- internet -->
<uses-permission android:name="android.permission.INTERNET" />
【问题讨论】:
-
最佳猜测:outputFileUri 在用于设置 selectedImageUri 之前为空。由于您尚未发布有关 outputFileUri 的相关代码,因此没有足够的信息可以帮助您。
-
嘿,通过包含相机代码更新了帖子,在此之前它被初始化为私有 Uri outputFilUri
-
您确定它的值正确吗?您是否包含了所需的权限?
-
E/JHEAD﹕无法打开 '/storage/emulated 我收到该错误,这是我将其添加到底部的错误。因为我稍微编辑了我的代码
-
当您使用 Log.e 记录您的消息时,它们在日志中显示为错误。您实际上应该使用 Log.d 或 Log.i。您还应该将要添加的权限发布到清单 (AndroidManifest.xml) 您可能忘记向外部文件添加权限。