Android onActivityResult为图像选择器返回null
我正在使用Firebase存储从Android应用程序上传图像。因此,当我单击photoBtn按钮时,图像选择器打开,但当我选择图像时,URI仍然为空 这是我的密码:Android onActivityResult为图像选择器返回null,android,firebase,null,firebase-storage,onactivityresult,Android,Firebase,Null,Firebase Storage,Onactivityresult,我正在使用Firebase存储从Android应用程序上传图像。因此,当我单击photoBtn按钮时,图像选择器打开,但当我选择图像时,URI仍然为空 这是我的密码: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCo
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK) {
Uri selectedImageUri = data.getData();
StorageReference photoRef=mEventPhotoReference.child(selectedImageUri.getLastPathSegment());
photoRef.putFile(selectedImageUri)
.addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// When the image has successfully uploaded, we get its download URL
downloadUrl = taskSnapshot.getDownloadUrl();
Toast.makeText(MainActivity.this,"got the uri",Toast.LENGTH_LONG).show();
}
});
}
}
//DISPLAY INPUT DIALOG
private void displayInputDialog()
{
Dialog d=new Dialog(this);
d.setTitle("Save To Firebase");
d.setContentView(R.layout.input_dialog);
nameEditTxt= (EditText) d.findViewById(R.id.nameEditText);
grpTxt= (EditText) d.findViewById(R.id.propellantEditText);
descTxt= (EditText) d.findViewById(R.id.descEditText);
Button saveBtn= (Button) d.findViewById(R.id.saveBtn);
Button photoBtn=(Button)d.findViewById(R.id.photoBtn);
linkTxt = (EditText) d.findViewById(R.id.linkEditText);
photoBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
startActivityForResult(Intent.createChooser(intent, "Complete action using"), RC_PHOTO_PICKER);
}
});
//SAVE
saveBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//GET DATA
String name=nameEditTxt.getText().toString();
String propellant=grpTxt.getText().toString();
String desc=descTxt.getText().toString();
String link=linkTxt.getText().toString();
Long tsLong = System.currentTimeMillis()/1000;
String ts = tsLong.toString();
//SET DATA
Spacecraft s=new Spacecraft();
if(downloadUrl==null){
Toast.makeText(MainActivity.this,"Photo is necessary to add an Event",Toast.LENGTH_SHORT).show();
}else {
s.setName(name);
s.setPropellant(propellant);
s.setDescription(desc);
s.setLink(link);
s.setImageUrl(downloadUrl.toString());
s.setTimestamp(ts);
}
//SIMPLE VALIDATION
if(name != null && name.length()>0)
{
//THEN SAVE
if(helper.save(s))
{
//IF SAVED CLEAR EDITXT
nameEditTxt.setText("");
grpTxt.setText("");
descTxt.setText("");
linkTxt.setText("");
downloadUrl=null;
adapter=new MyAdapter(MainActivity.this,helper.retrieve());
rv.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}else
{
Toast.makeText(MainActivity.this, "Name Must Not Be Empty", Toast.LENGTH_SHORT).show();
}
}
});
d.show();
}
有人能帮我解释一下为什么onSuccess方法从未被执行,而downloadUrl总是空的吗?看看我的答案。我提供了一个简单的包装器来获取图像并正确地接收它们。
< P>你可以考虑实现一个OnFulueListEnter来查看它为什么失败。如果“成功论”没有被称为“成功论”,那是因为它不成功。这就是失败监听器的作用
Uri file = Uri.fromFile(new File("path/to/images/rivers.jpg"));
StorageReference riversRef = storageRef.child("images/"+file.getLastPathSegment());
uploadTask = riversRef.putFile(file);
// Register observers to listen for when the download is done or if it fails
uploadTask.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
}
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
Uri downloadUrl = taskSnapshot.getDownloadUrl();
}
});
我刚刚意识到我的意图返回数据,但在onActivityResult中,addOnSuccessListener没有执行,如果您检查了我的答案,您会发现您必须将requestCode==RC\u PHOTO\u PICKER更改为requestCode&0xffff==RC\u PHOTO\u PICKER才能获得正确的十六进制值。不幸的是,它不起作用,photoRef.putFileselectedImageUri.addOnSuccessListener行仍然没有执行它是否实际到达了该部分?试着把一个日志放在那里,看看它是否真的进入了你的if语句我一定在踢我自己我的代码工作得很好它没有执行onSuccess方法的原因是我忘了公开我的firebase规则,总之谢谢你的帮助问题解决了我找到了答案,实际上是规则阻止了图像的上传,你改变了规则,一切都正常了好吧,但是你可以通过检查失败异常来发现这一点。你是如何找到答案的?奇怪的是,android studio出现了问题,它没有在日志消息中显示firebase异常日志,我重新启动了android studio,然后它显示了异常消息