Firebaseを使用して画像を保存および取得しようとしています。画像を保存する場合は問題ありませんが、ImageViewでは表示できません。エラーにならないので、どこが間違っているのかわかりません。
public class MainActivity extends AppCompatActivity {
private Button btnSelectImage;
private ImageView mImageView;
private StorageReference mStorage;
private static final int CAMERA_REQUEST_CODE = 1 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSelectImage = (Button) findViewById(R.id.btn_image);
mImageView = (ImageView) findViewById(R.id.imageView);
//Get instance
mStorage = FirebaseStorage.getInstance().getReference();
btnSelectImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_REQUEST_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==CAMERA_REQUEST_CODE && resultCode==RESULT_OK){
Uri uri = data.getData();
StorageReference filePath = mStorage.child("CameraPhotos").child(uri.getLastPathSegment());
filePath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
//Show image
Uri downloadUri = taskSnapshot.getDownloadUrl();
Picasso.with(MainActivity.this).load(downloadUri).into(mImageView);
Toast.makeText(MainActivity.this,"Upload Done",Toast.LENGTH_SHORT).show();
Log.v("Test","image load");
}
});
}
}
}
権限も与える
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.CAMERA"/>
<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"/>
これが私のFirebase Storageルールです
service firebase.storage {
match /b/fir-app-ce89f.appspot.com/o {
match /{allPaths=**} {
allow read, write: if true;
}
}
}
これが私の活動レイアウトです
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context="com.example.yusuf.firebaseapp.MainActivity">
<Button
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Select Image"
Android:id="@+id/btn_image"
Android:layout_alignParentTop="true"
Android:layout_centerHorizontal="true" />
<ImageView
Android:layout_width="400dp"
Android:layout_height="350dp"
Android:id="@+id/imageView"
Android:layout_centerVertical="true"
Android:layout_centerHorizontal="true" />
</RelativeLayout>
FirebaseUI 0.6 をご覧になることをお勧めします。これには、Firebase Storageからの画像のダウンロードを次のように簡単にするGlideプラグインが含まれています。
// Reference to an image file in Firebase Storage
StorageReference storageReference = ...;
// ImageView in your Activity
ImageView imageView = ...;
// Load the image using Glide
Glide.with(this /* context */)
.using(new FirebaseImageLoader())
.load(storageReference)
.into(imageView);
このように使えば簡単だと思います
StorageReference mImageRef =
FirebaseStorage.getInstance().getReference("image/test.jpg");
final long ONE_MEGABYTE = 1024 * 1024;
mImageRef.getBytes(ONE_MEGABYTE)
.addOnSuccessListener(new onSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
Bitmap bm = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
imageView.setMinimumHeight(dm.heightPixels);
imageView.setMinimumWidth(dm.widthPixels);
imageView.setImageBitmap(bm);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
private List<Upload> uploads;
Upload upload = uploads.get(position);
Glide.with(context).load(upload.getUrl()).into(holder.imageView);