无法使用 Picasso 从 url 加载图像?
Can not load an image from url using Picasso?
我正在尝试使用 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>
主要活动Class:
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();
}
});
}
}
}
在应用级别 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
}
我认为问题是因为您没有正确检索 url。
在 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 )
我正在尝试使用 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>
主要活动Class:
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();
}
});
}
}
}
在应用级别 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
}
我认为问题是因为您没有正确检索 url。 在 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 )