【发布时间】:2021-10-11 23:45:33
【问题描述】:
我使用 Java 语言创建了一个社交网络应用程序,该应用程序能够插入图片作为个人资料照片。如果我尝试上传我的照片,它可以工作,但如果其他用户尝试使用其他设备进行上传,他们看不到我的照片,我也看不到他们的照片。基本上每个人都使用自己的设备查看自己的照片。
然而,尽管我的头像上传正确,但它往往会在一段时间后消失。
如何解决?
截图:
https://i.stack.imgur.com/SXo99.jpg
尝试设置头像的代码:
firebaseFirestore.collection("Users").document(user_id).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if(task.isSuccessful()){
if(task.getResult().exists()){
String name = task.getResult().getString("name");
String image = task.getResult().getString("image");
String about = task.getResult().getString("about");
String skills = task.getResult().getString("skills");
mainImageUri = Uri.parse(image);
setupName.setText(name);
setupAbout.setText(skills);
setupSkills.setText(about);
RequestOptions placeholderRequest = new RequestOptions();
placeholderRequest = placeholderRequest.placeholder(R.drawable.defaultuser);
Glide.with(getApplicationContext())
.setDefaultRequestOptions(placeholderRequest)
.load(image)
.into(setupImage);
}
} else {
String error = task.getException().getMessage();
Toast.makeText(SetupActivity.this, "C'è stato un problema, riprova per favore.", Toast.LENGTH_LONG).show();
}
progressBar.setVisibility(View.INVISIBLE);
setupButton.setEnabled(true);
}
});
setupButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String user_name = setupName.getText().toString();
final String about = setupAbout.getText().toString();
final String userSkills = setupSkills.getText().toString();
if (!TextUtils.isEmpty(user_name) && mainImageUri != null) {
progressBar.setVisibility(View.VISIBLE);
if (isChanged) {
user_id = firebaseAuth.getCurrentUser().getUid();
final StorageReference image_path = storageReference.child("profile_images").child(user_id + ".jpg");
image_path.putFile(mainImageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
storeFirestore(task, user_name, about, userSkills, image_path);
} else {
Toast.makeText(SetupActivity.this, "C'è stato un problema, riprova per favore.", Toast.LENGTH_LONG).show();
progressBar.setVisibility(View.INVISIBLE);
}
}
});
} else {
storeFirestore(null, user_name, about, userSkills, null);
}
} else {
if(TextUtils.isEmpty(user_name))
{
Toast.makeText(SetupActivity.this, "Per favore, inserisci un nickname!", Toast.LENGTH_LONG).show();
} else
{
Toast.makeText(SetupActivity.this, "Per favore, inserisci una foto profilo!", Toast.LENGTH_LONG).show();
}
}
}
});
setupImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(SetupActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_DENIED) {
Snackbar snackbar = Snackbar.make(view, "Hai autorizzato l'app ad accedere al tuo archivio esterno?", Snackbar.LENGTH_SHORT);
snackbar.show();
ActivityCompat.requestPermissions(SetupActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
} else {
BringImagePicker();
}
} else {
BringImagePicker();
}
}
});
}
private void storeFirestore(Task<UploadTask.TaskSnapshot> task, String user_name,
String userSkills, String about, StorageReference image_path){
Uri download_uri = null;
if(task != null) {
task.getResult().getStorage().getDownloadUrl();
} else {
download_uri = mainImageUri;
}
Map<String, String> userMap = new HashMap<>();
userMap.put("skills", userSkills);
userMap.put("name", user_name);
userMap.put("about", about);
userMap.put("image", download_uri.toString());
userMap.put("user_id", user_id);
firebaseFirestore.collection("Users").document(user_id).set(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(SetupActivity.this, "Le impostazioni sono state aggiornate!", Toast.LENGTH_LONG).show();
Intent mainIntent = new Intent(SetupActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
} else {
Toast.makeText(SetupActivity.this, "C'è stato un problema, riprova per favore.", Toast.LENGTH_LONG).show();
}
progressBar.setVisibility(View.INVISIBLE);
}
});
}
第一行中的“user_id”是“firebaseAuth.getCurrentUser().getUid();”
onActivityResult 的代码:
【问题讨论】:
标签: java android google-cloud-firestore firebase-storage