我正在开发一个应用程序,它使用FireBase身份验证通过电话号码登录用户。登录后,相机将打开,用户可以拍摄存储到FireBase的照片。但是,当我拍摄照片并点击OK时,应用程序关闭。互联网上有很多类似的问题,我试着解决每一个问题,但没有什么能解决我的问题。请建议在这里解决。
这是activity.java的代码:
private Button tapCameraBtn;
private static final int CAMERA_REQUEST_CODE = 1;
private StorageReference storageReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_contact);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
//referencing the storage directory
tapCameraBtn = (Button) findViewById(R.id.tapCameraBtn);
tapCameraBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK && data!= null){
Uri uri = data.getData();
storageReference = FirebaseStorage.getInstance().getReference();
//creating another storage reference for filepath
StorageReference filepath = storageReference.child("Photos").child(uri.getLastPathSegment());
//uploading image captuured to firebase
filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Toast.makeText(AddContactActivity.this, "Uploading finished!", Toast.LENGTH_LONG).show();
}
});
}
}
}
清单文件在此处:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".SplashActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".AuthActivity"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<activity android:name=".APIActivity" android:parentActivityName=".GestureActivity"/>
<activity android:name=".GestureActivity" android:theme="@style/Theme.AppCompat.NoActionBar" />
<activity android:name=".AddContactActivity" android:theme="@style/Theme.AppCompat.NoActionBar"></activity>
</application>
此外,我还允许在我的设备中使用相机。
这里有一点更新,这个应用现在正在运行,但是在一个使用api 21的设备上,但是当我尝试在另外三个api 21以上的设备上运行同一个应用时,它给了我下面提到的错误:
致命异常:主
进程:com.example.pooja.auxilio,PID:17109
java.lang.runtimeexception:未能将结果resultinfo who=null,request=1,result=-1,data=intent act=inline data(has extras)传递到activity com.example.pooja.auxilio/com.example.pooja.auxilio.addcontactactivity:java.lang.illegalargumentexception:uri不能为空
在安卓.App.ActuviyToel.Delvices结果(ActuviyToel.java:4173)
在安卓.App.ActuviyTo.HouthLeNeMeREST(ActhviyToel.java:4216)
在安卓.App.ActuviyTrime.WrAP20(ActuviyTo.java)
在安卓.App.ActuviyT线$ H.HuffLeMeSeX(ActuviyTrim.java:1590)
在安卓.OS.Halder-Debug消息(HANDL.java:102)
在安卓.OS.Looper-Loo.(循环器.java:163)
在Addio.App.ActuviyTrime.Mead(ActuviyToel.java:6342)
在java.
在COM.Android .No.OS.ZyGoTynIt方法和AdjSculal.Run(ZyGoTynIt.java:880)
在COM.Android .No.OS.ZyGoTyIn.Mault(ZyGoTynIt.java:770)
原因:java.lang.IllegalArgumentException:uri不能为空
在com.google.android.gms.common.internal.preconditions.checkArgument(未知源)
在com.google.firebase.storage.storagereference.putfile(未知源)
在COM.示例.Poja.AuxiLo.AddioCistActudio.NoActuviyRESUTE(AddioTraceActudio . Java:104)
Apdio.App.Activity .Debug活动性结果(Activity .java:7111)
在安卓.App.ActuviyToel.Delvices结果(ActuviyToel.java:4169)
在安卓.App.ActuviyTrime.HouthLeNeMeREST(ActhVythType,Java:4216)
在安卓.App.ActuviyTrime.WrAP20(ActuviyTo.java)
在安卓.App.ActuviyT线$ H.HoalMeMeSeX(ActuviyTrim.java:1590)
在安卓.OS.Halder-Debug消息(HANDL.java:102)
在安卓.OS.Looper-Loor(Looper-Java:163)中
在Addio.App.ActuviyTrime.Mead(ActuviyToel.java:6342)
在java.
在Android系统中。
在COM.Android .No.OS.ZyGoTeNIT.MUN(ZyGoTynIt.java:770)