[英]Capture Image, Upload To Firebase And Retrieve Java Android Studio
[英]Upload Image to Firebase - Java
我嘗試上傳圖片,不幸的是,當我嘗試單擊按鈕繼續上傳圖片時,apk始終崩潰,這是日志
它說childName不能為null或為空
Java
package com.example.firstapplication;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;
import de.hdodenhof.circleimageview.CircleImageView;
public class Register_two extends AppCompatActivity {
LinearLayout btn_back;
Button btn_continue, btn_upload_photo;
ImageView prof_pic;
EditText bio, nama_lengkap;
Uri photo_location;
Integer photo_max = 1;
DatabaseReference reference;
StorageReference storage;
String USERNAME_KEY = "usernamekey";
String username_key = "";
String username_key_new = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register_two);
getUsernameLocal();
btn_continue = findViewById(R.id.btn_continue);
btn_back = findViewById(R.id.btn_back);
btn_upload_photo = findViewById(R.id.btn_upload_photo);
prof_pic = findViewById(R.id.prof_pic);
btn_upload_photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
findPhoto();
}
});
btn_continue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//ubah state menjadi loading...
btn_continue.setEnabled(false);
btn_continue.setText("Loading...");
//menyimpan ke Firebase
reference = FirebaseDatabase.getInstance().getReference().child("Users").child(username_key_new);
storage = FirebaseStorage.getInstance().getReference().child("Photousers").child(username_key_new);
//validasi untuk file (apakah ada?)
if (photo_location != null){
final StorageReference storageReference1 =
storage.child(System.currentTimeMillis() + "." +
getFileExtention(photo_location));
storageReference1.putFile(photo_location)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
storageReference1.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String uri_photo = uri.toString();
reference.getRef().child("url_photo_profile").setValue(uri_photo);
reference.getRef().child("nama_lengkap").setValue(nama_lengkap.getText().toString());
reference.getRef().child("bio").setValue(bio.getText().toString());
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
//pindah activity
Intent btncontinue = new Intent(Register_two.this,SuccessRegister.class);
startActivity(btncontinue);
}
});
}
}).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
//pindah activity
// Intent btncontinue = new Intent(Register_two.this,SuccessRegister.class);
// startActivity(btncontinue);
}
});
}
}
});
btn_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent goback = new Intent(Register_two.this,Register_one.class);
startActivity(goback);
}
});
}
String getFileExtention(Uri uri){
ContentResolver contentResolver = getContentResolver();
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
}
public void findPhoto(){
Intent pic = new Intent();
pic.setType("image/*");
pic.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(pic, photo_max);
}
@Override
public void onActivityResult (int requestCode, int resultCode, @Nullable Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == photo_max && resultCode == RESULT_OK && data != null && data.getData() != null)
{
photo_location = data.getData();
Picasso.with(this).load(photo_location).centerCrop().fit().into(prof_pic);
}
}
public void getUsernameLocal(){
SharedPreferences sharedPreferences = getSharedPreferences(USERNAME_KEY, MODE_PRIVATE);
username_key_new = sharedPreferences.getString(username_key,"");
}
}
錯誤說,我在第81行將null
傳遞給一個child
storage = FirebaseStorage.getInstance().getReference().child("Photousers").child(username_key_new);
但我不知道怎么了
你有嘗試過嗎?
我建議制作一個返回字符串,而不是制作一個void方法
//Please check what is the identifier of the string in sharedpreferences
//if usernamekey is the identifier then getString("usernamekey","");
public String getUsernameLocal(){
SharedPreferences sharedPreferences = getSharedPreferences(USERNAME_KEY, MODE_PRIVATE);
String userKey= sharedPreferences.getString(USERNAME_KEY,"");
return userKey;
}
和你的參考
storage = FirebaseStorage.getInstance().getReference().child("Photousers").child(getUsernameLocal());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.