我正在尝试使用Picasso加载图像,但没有任何渲染。
代码的想法是从设备中选择图像。稍后我们将其上传到服务器并将其显示给用户。
前两部分已实现,但问题是图像未在相应的图像视图中显示。
这是布局文件 -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/b_img"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:text="Select image"
/>
<ImageView
android:id="@+id/profileImage"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_below="@+id/b_img"
/>
</LinearLayout>
MainActivity类:
public class MainActivity extends AppCompatActivity {
private Button bSelectImg;
private StorageReference storageReference;
private static final int g_img = 1;
private ProgressDialog progressDialog;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {....
storageReference = FirebaseStorage.getInstance().getReference();
progressDialog = new ProgressDialog(this);
bSelectImg = (Button)findViewById(R.id.b_img);
imageView =(ImageView)findViewById(R.id.profileImage);
bSelectImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent= new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent , g_img);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode,resultCode,data);
if(requestCode == g_img && requestCode != RESULT_OK ) {
Uri uri = data.getData();
progressDialog.setMessage("uploading.....");
progressDialog.show();
StorageReference filepath = storageReference.child("Photos").child(uri.getLastPathSegment());
filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Task<Uri> downloadUrl = storageReference.getDownloadUrl();
Log.i("urlimagexcx",""+downloadUrl);
Picasso.with(MainActivity.this)
.load(downloadUrl.toString())
.into(imageView);
Toast.makeText(MainActivity.this,"Upload is don",Toast.LENGTH_LONG).show();
progressDialog.dismiss();
}
});
}
}
}
在app level gradle文件中,我使用的是Picasso版本2.5.2-
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.firebase:firebase-auth:16.2.0'
implementation 'com.google.firebase:firebase-database:16.1.0'
implementation 'com.google.firebase:firebase-storage:16.1.0'
// implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.squareup.picasso:picasso:2.5.2'
///
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath 'com.google.gms:google-services:4.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
我认为问题是因为您没有正确检索网址。在onSuccess中上传图像后,尝试执行此操作:
filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(final Uri uri) {
String downloadUrl = uri.toString();
Picasso.with(MainActivity.this)
.load(downloadUrl)
.into(imageView);
//continue closing brackets here...
经过进一步检查,我注意到你的onActivityResult也可能有问题。这对我来说似乎不对。
if(requestCode == g_img && requestCode != RESULT_OK )
相反它应该是:
if(requestCode == g_img && resultCode == RESULT_OK )