我正在编写一个允许用户将图像上传到Firebase Storage的应用程序。有一个活动列出了他们所有上传的图像,但是我无法显示该图像。
使用图像的类称为Symbol.java
。每个Symbol
都有名称,描述,用户ID和图像。图像存储在Firebase存储中,然后url存储在Symbol
中,该文件位于Firestore中称为符号的表中。此位工作正常-我可以上传图片并正确存储网址。这样会在符号表中提供一个条目,如下所示:
symbols > symbol_key > name = "Example"
description = "Example symbol"
uid = "{My user id}"
url = "images/image_name.png"
因此,活动获取当前用户的Symbols
列表并将其存储为ArrayList<Symbol>
。该位工作正常-正确检索了符号并在ArrayList中进行了设置。该列表用于以下功能,该功能在网格中显示符号:
private void initialiseWithSymbols() {
if (mSymbols == null) return;
SymbolAdapter mSymbolAdapter
= new SymbolAdapter(
mContext,
mSymbols,
R.layout.adapter_symbol_manage_layout);
mGridCurrentSymbols.setAdapter(mSymbolAdapter);
mGridCurrentSymbols.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
R.layout.adapter_symbol_manage_layout
是:
<?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:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="4dp"
android:paddingBottom="4dp">
<myapp.models.SymbolCell
android:layout_width="@dimen/grid_cell_column_width"
android:layout_height="@dimen/grid_cell_column_width"
android:id="@+id/symbol_cell"/>
<TextView
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/symbol_key"
tools:ignore="RtlSymmetry" />
</LinearLayout>
其中myapp.models.SymbolCell
是:
public class SymbolCell extends android.support.v7.widget.AppCompatImageView {
private Symbol mSymbol; // Symbol to be shown
public SymbolCell(Context context, AttributeSet attrs) {
super(context, attrs);
}
public Symbol getSymbol() { return this.mSymbol; }
public void setSymbol(Symbol symbol) { this.mSymbol = symbol; }
// Draw the symbol
protected void onDraw(Canvas canvas) {
if(this.mSymbol == null) return;
// Draw the symbol
String drawableUrl = mSymbol.getUrl();
Context context = getContext();
if(drawableUrl != null) {
Glide.with(context)
.load("http://path_to_image")
.into(this);
}
}
}
注意:我目前已在固定的path_to_image中放置了图片;还没有从数据库中检索图像URL并进行设置。我检查过我使用的图像是否确实存在,并且不是透明/白色。
SymbolAdapter
是:
public class SymbolAdapter extends ArrayAdapter<Symbol> {
private final Context mContext;
private final ArrayList<Symbol> mSymbolArray;
private final int layoutId;
public SymbolAdapter(Context context, ArrayList<Symbol> symbolArray,
int layout_id) {
super(context, layout_id, symbolArray);
this.mContext = context;
this.mSymbolArray = symbolArray;
this.layoutId = layout_id;
}
private static class ViewHolder {
private SymbolCell symbolCell;
private TextView symbolName, symbolKey;
}
@NonNull
@Override
public View getView(final int position, View convertView, @NonNull ViewGroup parent) {
final ViewHolder mViewHolder;
if(convertView == null) {
mViewHolder = new ViewHolder();
LayoutInflater layoutInflater
= (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(layoutId, parent, false);
mViewHolder.symbolCell = convertView.findViewById(R.id.symbol_cell);
convertView.setTag(mViewHolder);
// Set up the View Holder
Symbol cellSymbol = mSymbolArray.get(position);
// Symbol Cell
SymbolCell symbolCell = mViewHolder.symbolCell;
if (symbolCell != null) {
symbolCell.setSymbol(cellSymbol);
// Symbol Name
if(mViewHolder.symbolName != null) {
mViewHolder.symbolName.setText(cellSymbol.getName());
}
// Symbol Key
if(mViewHolder.symbolKey != null) {
mViewHolder.symbolKey.setText(cellSymbol.getKey());
}
}
return convertView;
}
public int getCount() { return mSymbolArray.size(); }
public Symbol getItem(int position) { return mSymbolArray.get(position); }
}
所以,当我这样做时,我只会看到一个空的白色正方形网格。我尝试了各种教程,并收集了创建Glide Module所需的信息。我真的不知道这意味着什么,也找不到任何可以澄清的模块,因此我创建了一个名为“ MyAppGlideModule.java”的文件”(与Activity类一起使用),它基本上是空的:
@GlideModule
public class MyAppGlideModule extends AppGlideModule {}
我尝试更换
Glide.with(context).load("http://path_to_image").into(this);
高于
GlideApp.with(context).load("http://path_to_image").into(this);
但这似乎没有任何区别。我还尝试将其替换为“ MyAppGlideModule”而不是“ Glide”,但是那样就不允许我执行“ .with()”了。
我不确定自己在做什么错-我以前从未使用过Glide,所以真的不知道从哪里开始。有人可以建议吗?谢谢。