Я пишу приложение, которое позволяет пользователю загружать изображение в Firebase Storage.Есть действие, в котором перечислены все их загруженные изображения, но я не могу показать его.
Класс, который использует изображения, называется Symbol.java
.Каждый Symbol
имеет имя, описание, идентификатор пользователя и изображение.Изображение сохраняется в Firebase Storage, а затем URL-адрес сохраняется в Symbol
, который находится в таблице, называемой символами в Firestore.Этот бит работает нормально - я могу загрузить изображение и правильно сохранить URL-адрес.Это дает запись в таблице символов следующим образом:
symbols > symbol_key > name = "Example"
description = "Example symbol"
uid = "{My user id}"
url = "images/image_name.png"
Итак, Activity получает список текущего пользователя 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 ... Я действительно не знаю, что это значит, и не смог найти ничего, что прояснило бы это, поэтому я создал файл с именем "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, поэтому не знаю, с чего начать.Кто-нибудь может посоветовать?Спасибо.