如何解决无法使用毕加索从Firebase检索图像字符串
我正在制作一个聊天应用程序,并使用Firebase上传数据,包括用户的姓名,状态和图像(以字符串形式)。名称和状态工作正常,但是图像根本没有加载。我认为代码是正确的,但无法检索图像的ID。图像已在Firebase中上传,没有任何问题。我正在使用毕加索检索它们。请您提出我为什么无法检索图像的建议? 这是我的代码
public class SettingsActivity extends AppCompatActivity {
private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;
private CircleImageView mdisplayImage;
private TextView mName;
private TextView mStatus;
private Button mStatusBtn;
private Button mImageBtn;
private static final int galLERY_PICK=1;
private StorageReference mImageStorage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
mdisplayImage=(CircleImageView) findViewById(R.id.settings_image);
mName= (TextView) findViewById(R.id.settings_display_name);
mStatus=(TextView) findViewById(R.id.setting_status);
mStatusBtn=(Button) findViewById(R.id.settings_status_btn);
mImageBtn=(Button)findViewById(R.id.settings_img_btn);
mImageStorage= FirebaseStorage.getInstance().getReference();
mCurrentUser= FirebaseAuth.getInstance().getCurrentUser();
String current_uid=mCurrentUser.getUid();
mUserDatabase= FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
mUserDatabase.keepSynced(true);
mUserDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
final String image=dataSnapshot.child("image").getValue().toString();
final String name = dataSnapshot.child("name").getValue().toString();
String status = dataSnapshot.child("status").getValue().toString();
String thumb_image=dataSnapshot.child("thumb_image").getValue().toString();
mName.setText(name);
mStatus.setText(status);
if(!image.equals("default")) {
Picasso.get().load(image).networkPolicy(NetworkPolicy.OFFLINE)
.placeholder(R.drawable.dog).into(mdisplayImage,new Callback() {
@Override
public void onSuccess() {
Toast.makeText(SettingsActivity.this,"Success",Toast.LENGTH_LONG).show();
}
@Override
public void onError(Exception e) {
Picasso.get().load(image).networkPolicy(NetworkPolicy.OFFLINE)
.placeholder(R.drawable.dog).into(mdisplayImage);
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
mStatusBtn.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String status_value=mStatus.getText().toString().trim();
Intent status_intent=new Intent(SettingsActivity.this,StatusActivity.class);
status_intent.putExtra("status_value",status_value);
startActivity(status_intent);
}
});
mImageBtn.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent galleryIntent= new Intent();
galleryIntent.setType("image/*");
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(galleryIntent,"Select Image "),galLERY_PICK);
}
});
}
@Override
protected void onActivityResult(int requestCode,int resultCode,@Nullable Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if(requestCode==galLERY_PICK&& resultCode==RESULT_OK){
Uri imageUri=data.getData();
CropImage.activity(imageUri)
.setAspectRatio(1,1)
.start(SettingsActivity.this);
}
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
final AlertDialog dialog = new AlertDialog.Builder(SettingsActivity.this).create();
dialog.setTitle("Uploading image...");
dialog.setMessage("Please wait while we upload your image");
dialog.setCanceledOnTouchOutside(false);
dialog.show();
Uri resultUri = result.getUri();
final File thumb_filePath= new File(resultUri.getPath());
String current_user_id=mCurrentUser.getUid();
Bitmap thumb_bitmap = new Compressor(SettingsActivity.this)
.setMaxWidth(200)
.setMaxHeight(200)
.setQuality(75)
.compresstoBitmap(thumb_filePath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
thumb_bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos);
final byte[] thumb_byte = baos.toByteArray();
StorageReference filepath=mImageStorage.child("profile_images").child(current_user_id + ".jpg");
final StorageReference thumb_filepath=mImageStorage.child("profile_images").child("thumbs").child(current_user_id + ".jpg");
filepath.putFile(resultUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if(task.isSuccessful()){
final String download_url= task.getResult().getStorage().getDownloadUrl().toString();
UploadTask uploadTask=thumb_filepath.putBytes(thumb_byte);
uploadTask.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> thumb_task) {
String thumb_downloadUrl=thumb_task.getResult().getStorage().getDownloadUrl().toString();
if(thumb_task.isSuccessful()){
Map update_hashMap=new HashMap<>();
update_hashMap.put("image",download_url);
update_hashMap.put("thumb_image",thumb_downloadUrl);
mUserDatabase.updateChildren(update_hashMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
dialog.dismiss();
Toast.makeText(SettingsActivity.this,"Success Uploading thumbnail",Toast.LENGTH_LONG).show();
}
}
});
}
else {
Toast.makeText(SettingsActivity.this,"Error in uploading thumbnail",Toast.LENGTH_LONG).show();
dialog.dismiss();
}
}
});
mUserDatabase.child("image").setValue(download_url).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
dialog.dismiss();
Toast.makeText(SettingsActivity.this,"Successfuly Uploaded.",Toast.LENGTH_LONG).show();
}
}
});
}
else{
Toast.makeText(SettingsActivity.this,"Error in uploading",Toast.LENGTH_LONG).show();
dialog.dismiss();
}
}
});
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
}
这是XML布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00BCD4"
tools:context=".SettingsActivity">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/settings_image"
android:layout_width="230dp"
android:layout_height="224dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="72dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.491"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"></de.hdodenhof.circleimageview.CircleImageView>
<TextView
android:id="@+id/settings_display_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="326dp"
android:text="display Name"
android:textSize="30sp" />
<TextView
android:id="@+id/setting_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="301dp"
android:text="@string/default_status"
android:textSize="25sp" />
<Button
android:id="@+id/settings_img_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="204dp"
android:text="Change Image" />
<Button
android:id="@+id/settings_status_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="152dp"
android:layout_marginLeft="152dp"
android:layout_marginBottom="119dp"
android:text="Change Status" />
</RelativeLayout>
解决方法
我认为主要问题是networkPolicy(NetworkPolicy.OFFLINE)
。您基本上是在跳过网络,并强迫Picasso在磁盘中进行搜索。这意味着它没有与Firebase通信,因此未加载图像。作为参考,请阅读官方文档:
https://square.github.io/picasso/2.x/picasso/com/squareup/picasso/NetworkPolicy.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。