我想要做的是捕获图像并在图像视图中查看它并将其存储到firebase存储 .
我的代码:
public class WaterConsumptionPage extends Fragment {
private ImageView imageView;
private Button capture, upload;
static final int CAM_REQUEST = 1;
private StorageReference mStorageRef;
private FirebaseAuth mAuth;
private DatabaseReference dbRef;
private ProgressDialog mProgress;
private Bitmap photo;
private FirebaseUser user;
private Uri uri;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.water_consumption_page, container, false);
mStorageRef = FirebaseStorage.getInstance().getReference();
mAuth = FirebaseAuth.getInstance();
dbRef = FirebaseDatabase.getInstance().getReference();
user = mAuth.getCurrentUser();
imageView = rootView.findViewById(R.id.water_image);
capture = rootView.findViewById(R.id.water_capture);
upload = rootView.findViewById(R.id.water_upload);
upload.setEnabled(false);
capture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent cam_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(cam_intent.resolveActivity(getActivity().getPackageManager()) != null){
startActivityForResult(cam_intent, CAM_REQUEST);
}
}
});
mProgress = new ProgressDialog(getContext());
upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mProgress.setMessage("Uploading Image...");
mProgress.show();
StorageReference filepath = mStorageRef.child("Photos").child(user.getUid()).child("Water").child(uri.getLastPathSegment());
filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
mProgress.dismiss();
Toast.makeText(getContext(), "Upload Finished...", Toast.LENGTH_LONG).show();
Intent i = new Intent(getContext(), WaterConsumption.class);
startActivity(i);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
mProgress.dismiss();
Toast.makeText(getContext(), "Upload has stopped.", Toast.LENGTH_LONG).show();
}
});
}
});
return rootView;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == CAM_REQUEST && data != null){
upload.setEnabled(true);
uri = data.getData();
Bundle extras = data.getExtras();
photo = (Bitmap) extras.get("data");
imageView.setImageBitmap(photo);
}
}
错误:
E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.akoni.conread,PID:13901 java.lang.NullPointerException:尝试调用虚方法'java.lang.String android.net.Uri.getLastPathSegment()'on com.example.akoni.conread.WaterConsumptionPage $ 2.onClick(WaterConsumptionPage.java:87)中的null对象引用,位于android.view.View.View.View $View上的android.view.View.performClick(View.java:5265)$ PerformClick.run( View.java:21534)android.os.Handler.handleCallback(Handler.java:815)android.os.Handler.dispatchMessage(Handler.java:104)android.os.Looper.loop(Looper.java:207) )在android.app.ActivityThread.main(ActivityThread.java:5728)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:789) )在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
我也尝试将下面的代码放在 onActivityResult() 中以测试我是否可以保存图像,但是我还有另一个错误(如下) .
StorageReference filepath = mStorageRef.child("Photos").child(user.getUid()).child("Water").child(uri.getLastPathSegment());
filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
mProgress.dismiss();
Toast.makeText(getContext(), "Upload Finished...", Toast.LENGTH_LONG).show();
Intent i = new Intent(getContext(), WaterConsumption.class);
startActivity(i);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
mProgress.dismiss();
Toast.makeText(getContext(), "Upload has stopped.", Toast.LENGTH_LONG).show();
}
});
错误:
E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.akoni.conread,PID:14526 java.lang.RuntimeException:传递结果失败ResultInfo {who = null,request = 65537,result = -1,data = Intent { act = inline-data(has extras)}} to activity {com.example.akoni.conread / com.example.akoni.conread.TabMenu}:java.lang.NullPointerException:尝试调用虚方法'java.lang.String Android.net上的android.app.ActivityThread.handleSendResult(ActivityThread.java:3972)上android.app.ActivityThread.deliverResults(ActivityThread.java:3929)的空对象引用上的android.net.Uri.getLastPathSegment()' . Activity.Thread.- wrap16(ActivityThread.java)位于android.app.Loper.loop上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1537)android.os.Handler.dispatchMessage(Handler.java:111) Looper.java:207)在android.app.ActivityThread.main(ActivityThread.java:5728)的java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCalle r.run(ZygoteInit.java:789)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)引起:java.lang.NullPointerException:尝试调用虚方法'java.lang.String android .net.Uri.getLastPathSegment()'位于android.support.v4.app.FragmentActivity.onActivityResult上的com.example.akoni.conread.WaterConsumptionPage.onActivityResult(WaterConsumptionPage.java:120)上的空对象引用(FragmentActivity.java: 151)在android.app.ActivityThread.deliverResults(ActivityThread.java:3925)的android.app.A活动中,Android.A.运行时,我在android.app.ActivityThread.deleverResult(ActivityThread.java:3972)的android.app.A活动 . app.ActivityThread.-wrap16(ActivityThread.java)在Android.os.Looper的android.app.Handler.dispatchMessage(Handler.java:111)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1537) . 在com.androi的java.lang.reflect.Method.invoke(Native Method)的android.app.ActivityThread.main(ActivityThread.java:5728)上循环(Looper.java:207) d.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:789)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
我想 capture the image and view it to the ImageView first 并单击 upload
将图像保存到firebase .
1 回答
你应该删除这行代码:
因为我认为这一行会导致data.getIntent()没有返回任何内容 .
如果没有问题,您还应该检查
resultCode
. 这是一个例子: