【发布时间】:2020-08-16 08:26:39
【问题描述】:
可以通过单击“选择图像”按钮来选择图像,它将显示在图像视图中 单击“保存图像”后将上传到 Firebase 存储。如果成功,则有关该图像的数据将上传到实时 Firebase 数据库。但是单击“保存图像”按钮后没有任何反应。那里有什么问题?
这些是我的代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button chooseButton,saveButton,displayButton;
private EditText imagenameEdittext;
private ImageView imageView;
private ProgressBar progressBar;
private Uri imageUri;
private StorageReference storageReference;
private DatabaseReference databaseReference;
private StorageTask uploadTask;
private static final int IMAGE_REQUEST = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
databaseReference = FirebaseDatabase.getInstance().getReference("Upload");
storageReference = FirebaseStorage.getInstance().getReference("Upload");
chooseButton = findViewById(R.id.chooseImageButtonid);
saveButton = findViewById(R.id.saveImageButtonid);
displayButton = findViewById(R.id.displayImageButtonid);
progressBar = findViewById(R.id.progressbarid);
imageView = findViewById(R.id.imageviewid);
imagenameEdittext = findViewById(R.id.imagenameEdittextid);
chooseButton.setOnClickListener(this);
saveButton.setOnClickListener(this);
displayButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.chooseImageButtonid:
openFileChooser();
break;
case R.id.saveImageButtonid:
if(uploadTask!=null && uploadTask.isInProgress()){
Toast.makeText(this, "Uploading in progress", Toast.LENGTH_SHORT).show();
}
else{
saveData();
}
saveData();
break;
case R.id.displayImageButtonid:
break;
}
}
public void openFileChooser(){
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==IMAGE_REQUEST && resultCode==RESULT_OK && data!=null && data.getData()!=null){
imageUri = data.getData();
Picasso.get().load(imageUri).into(imageView);
}
}
public String getFileExtension(Uri imageUri){
ContentResolver contentResolver = getContentResolver();
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(imageUri));
}
private void saveData(){
final String imageName = imagenameEdittext.getText().toString().trim();
if(imageName.isEmpty()){
imagenameEdittext.setError("Enter the image name");
imagenameEdittext.requestFocus();
return;
}
StorageReference ref = storageReference.child(System.currentTimeMillis()+"."+getFileExtension(imageUri));
ref.putFile(imageUri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
// Get a URL to the uploaded content
Toast.makeText(MainActivity.this, "Image is stored Successfully", Toast.LENGTH_SHORT).show();
Upload upload = new Upload(imageName,taskSnapshot.getStorage().getDownloadUrl().toString());
String uploadId = databaseReference.push().getKey();
databaseReference.child(uploadId).setValue(upload);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle unsuccessful uploads
Toast.makeText(MainActivity.this, "Image store failed", Toast.LENGTH_SHORT).show();
}
});
}
}
【问题讨论】:
-
可能是运行时权限问题。从 API 23 开始,您需要运行时权限才能访问 Gallert 来挑选图像。 stackoverflow.com/questions/39866869/…
-
你无法获得这样的下载地址 => taskSnapshot.getStorage().getDownloadUrl().toString()
-
这个不行:
taskSnapshot.getStorage().getDownloadUrl().toString()获取下载地址的正确方法,见documentation或stackoverflow.com/questions/51056397/… -
尝试使用
VPN上传。您可以使用Hotspot Sheild VPN。如果上传可以使用 VPN,那么您必须了解您所在国家/地区的互联网服务存在问题。因为,从 2020 年 5 月 29 日起,Bangladeshfirebase 存储的本机 sdk 无法正常工作。这是孟加拉国的BTCL的问题。我们对此无能为力。所以,试试 Hotspot Sheild VPN。 -
mubin986 在这方面我使用了 SuperVPN。但还是什么都没发生
标签: android firebase-realtime-database firebase-storage