Android 从firebase接收IMG到RecyclewView
我的RecyclerView未在基准上显示存储的图像。 为了更方便用户管理我的数据,我使用FirebaseUI;为了加载我的IMG,我使用GLIDE(GlideApp方法) 因此: 舱单:Android 从firebase接收IMG到RecyclewView,android,firebase,android-recyclerview,firebaseui,android-glide,Android,Firebase,Android Recyclerview,Firebaseui,Android Glide,我的RecyclerView未在基准上显示存储的图像。 为了更方便用户管理我的数据,我使用FirebaseUI;为了加载我的IMG,我使用GLIDE(GlideApp方法) 因此: 舱单: <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
我的数据库:
我的FOTOMODEL.CLASS:
public class PhotoModel {
@Exclude private String desc;
@Exclude private String image;
@Exclude private String title;
public PhotoModel(String desc, String image, String title) {
this.desc = desc;
this.image = image;
this.title = title;
}
//firebase
public PhotoModel (){
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Keep
public String getImage() {
return image;
}
@Keep
public void setImage(String image) {
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
滑动模块:
public void registerComponents(Context context, Glide glide, Registry registry) {
// Register FirebaseImageLoader to handle StorageReference
registry.append(StorageReference.class, InputStream.class,
new FirebaseImageLoader.Factory());
}
最后是我的代码:
private RecyclerView recyclerList;
DatabaseReference mDatabaseStorage ;
FirebaseStorage mFirebaseStorage;
FirebaseRecyclerAdapter firebaseRecyclerAdapter;
Query query;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
setContentView(R.layout.activity_photo);
super.onCreate(savedInstanceState);
mDatabaseStorage = FirebaseDatabase.getInstance().getReference().child("Blog");
Toolbar toolbar = (Toolbar) findViewById(R.id.myToolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationOnClickListener(view -> onBackPressed());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
query = FirebaseDatabase.getInstance().getReference("Blog");
ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
// ...
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
// ...
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
// ...
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// ...
}
};
query.addChildEventListener(childEventListener);
recyclerList = (RecyclerView)findViewById(R.id.recycler_view);
recyclerList.setHasFixedSize(true);
recyclerList.setLayoutManager(new LinearLayoutManager(this));
}
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerOptions<PhotoModel> options = new FirebaseRecyclerOptions.Builder<PhotoModel>()
.setQuery(query, PhotoModel.class)
.build();
mFirebaseStorage = FirebaseStorage.getInstance();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<PhotoModel, PhotoViewHolder>(options) {
@Override
public void onError(DatabaseError e) {
Log.e("FirebaseRecyclerAdapter", e.toString());
}
@NonNull
@Override
public PhotoViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recycler_single_photo_row, parent, false);
return new PhotoViewHolder (view) ;
}
@Override
protected void onBindViewHolder(@NonNull PhotoViewHolder holder, int position, @NonNull PhotoModel model) {
Uri myUri = Uri.parse(model.getImage().toString());
Log.i("ImageFromModel", model.getImage().toString());
GlideApp.with(getApplicationContext())
.load(myUri)
.centerCrop()
.error(R.drawable.ic_error_black_24dp)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
Log.e("TAG_FROM_GLIDE", "Error loading image", e);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.fitCenter()
.into(holder.firebaseImages);
}
};
recyclerList.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();
}
public static class PhotoViewHolder extends RecyclerView.ViewHolder {
public ImageView firebaseImages;
View globalView;
public PhotoViewHolder(View itemView) {
super(itemView);
this.firebaseImages = (ImageView) itemView.findViewById(R.id.imageFirebase);
globalView = itemView;
}
public void setTitle (String title){
TextView post_name = (TextView) globalView.findViewById(R.id.photo_name);
post_name.setText(title);
}
public void setDesc (String desc){
TextView post_desc = (TextView) globalView.findViewById(R.id.photo_desc);
post_desc.setText(desc);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if ( item.getItemId() == R.id.addPhotoActivity) {
Intent intent = new Intent(PhotoActivity.this, AddNewPhotoActivity.class);
startActivity(intent);
}
return true;
}
- 日志来自LOG.i(“ImageFromModel”,model.getImage().toString()) content://com.example.htw.mytestapp.provider/my_images/Android/data/com.example.htw.mytestapp/files/Pictures/JPEG_20180613_104007_-1022454302.jpg content://com.example.htw.mytestapp.provider/my_images/Android/data/com.example.htw.mytestapp/files/Pictures/JPEG_20180613_104052_-450216218.jpg content://com.example.htw.mytestapp.provider/my_images/Android/data/com.example.htw.mytestapp/files/Pictures/JPEG_20180613_104118_1956285222.jpg content://com.example.htw.mytestapp.provider/my_images/Android/data/com.example.htw.mytestapp/files/Pictures/JPEG_20180619_114556_5693763765908649752.jpg content://com.example.htw.mytestapp.provider/my_images/Android/data/com.example.htw.mytestapp/files/Pictures/JPEG_20180621_123728_-880882730.jpg
06-25 11:42:49.454 17886-17886/com.example.htw.mytestapp E/TAG_FROM_GLIDE: Error loading image
class com.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 cause:
com.google.firebase.storage.StorageException(Object does not exist at location.)
call GlideException#logRootCauses(String) for more detail
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Fetching data failed, class java.io.InputStream, REMOTE
There was 1 cause:
com.google.firebase.storage.StorageException(Object does not exist at location.)
call GlideException#logRootCauses(String) for more detail
Cause (1 of 1): class com.google.firebase.storage.StorageException: Object does not exist at location.
firebase数据库中的下载url链接不是您需要的,而是
内容:示例
。。。你只需要照片的纯链接
你需要这个网址
从url加载位图
try {
String imageUrl = "your/url/image.jpg";
InputStream in = (InputStream) new URL(imageUrl).getContent();
Bitmap bitmap = BitmapFactory.decodeStream(in);
//Store your bitmap for reuse
container.bitmap = bitmap;
in.close();
} catch (Exception e) {
e.printStackTrace();
}
然后可以使用
ImageView.setImageBitmap(container.bitmap)代码>解决方案强>
全球验证:
私有字符串uploadImageUrl强>
添加im我的添加PhotoButton方法:
newPostDatabase.child(“url_link”).setValue(uploadImageUrl)
附加模块:
filepatch.putFile(photoURI).addOnSuccessListener
添加以下内容:
filepatch.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Uri downloadUrl = uri;
uploadImageUrl = downloadUrl.toString();
Log.i("photoURI",uploadImageUrl ) ;
}
});
filepatch.getDownloadUrl().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时的公共无效(Uri){
Uri downloadUrl=Uri;
uploadImageUrl=downloadUrl.toString();
Log.i(“photoURI”,uploadImageUrl);
}
});
我以前没有使用过Glide,但如果您不介意的话,我有另一种从url获取图像位图的方法,我可以在本课程中发布代码,我会尝试一切。我不需要一个文件的URL,而是整个存储文件夹的URL来加载到GlideApp方法加载。你应该像现在一样存储每个图像URL,并检索每个URL,你不能从你存储的文件夹中加载一堆照片content://com.example.htw.mytestapp.provider/my_images/Android/data/com.example.htw.mytestapp/files/Pictures/JPEG_20180613_104007_-1022454302.jpg 和其他人将它们放入某个对象(列表?),然后将此列表放入GlideApp.load?你能提供一些例子吗?抱歉,这不是firebase使用glide的方式,glide只是从URL打开一个图像,或者只是从你的应用程序中打开一个可绘制的图像,如果你想从firebase加载图像,你应该获得照片的下载URL,检查我制作的这段视频,它是西班牙语的,但它可以帮助你了解它的工作原理,第1部分和第2部分我看了你们的视频,但并没有ansewr,放一个文件是很简单的工作,我要求一些更复杂的东西
try {
String imageUrl = "your/url/image.jpg";
InputStream in = (InputStream) new URL(imageUrl).getContent();
Bitmap bitmap = BitmapFactory.decodeStream(in);
//Store your bitmap for reuse
container.bitmap = bitmap;
in.close();
} catch (Exception e) {
e.printStackTrace();
}
filepatch.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Uri downloadUrl = uri;
uploadImageUrl = downloadUrl.toString();
Log.i("photoURI",uploadImageUrl ) ;
}
});