Ошибка: com.google.firebase.database.DatabaseException: не удалось преобразовать значение типа java.util.ArrayList в строку - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь просмотреть пару изображений в моем приложении, и ссылки на изображения сохраняются в базе данных Firebase в реальном времени.Я загрузил эти ссылки в формате .JSON и не добавил их вручную в базу данных в реальном времени.При попытке получить эти изображения в моем приложении происходит сбой после нескольких секунд нажатия кнопки для запуска изображений («ZamCatalog остановился»).В логах я получаю сообщение об ошибке ниже.Не уверен, что происходит не так, пожалуйста, помогите.

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.android.zamcatalog, PID: 13529 com.google.firebase.database.DatabaseException: Не удалось преобразовать значение типа java.util.ArrayList в строку в com.google.android.gms.internal.zzelw.zzb (неизвестный источник: 93) в com.google.android.gms.internal.zzelw.zza (неизвестный).Источник: 0) на com.google.firebase.database.DataSnapshot.getValue (неизвестный источник: 10) на com.example.android.zamcatalog.gameActivity $ 1.onDataChange (gameActivity.java:43) на com.google.android.gms.internal.zzegf.zza (неизвестный источник: 13) на com.google.android.gms.internal.zzeia.zzbyc (неизвестный источник: 2) на com.google.android.gms.internal.zzeig.run (неизвестный источник:71) на android.os.Handler.handleCallback (Handler.java:789) на android.os.Handler.dispatchMessage (Handler.java:98) на android.os.Looper.loop (Looper.java:164) на андроид.app.ActivityThread.main (ActivityThread.java:6944) в java.lang.reflect.Method.invoke (NativeMethod) в com.android.internal.os.Zygote $ MethodAndArgsCaller.run (Zygote.java:327) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374) Приложение завершено.

Ниже приведен снимок изображений, сохраненных в базе данных

Firebase Realtime Database

код gameActivity для получения изображений

public class gameActivity extends AppCompatActivity {

ViewPager viewPager;
ViewPagerAdapter adapter;

private FirebaseDatabase firebaseDatabase=FirebaseDatabase.getInstance();
private DatabaseReference reference=firebaseDatabase.getReference();
//private DatabaseReference childreference=reference.child("images");
private DatabaseReference gameReference=reference.child("game");

private ArrayList<String> images = new ArrayList<String>();

@Override
protected void onStart() {
    super.onStart();
    gameReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String images = dataSnapshot.getValue(String.class);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
           // Log.w(TAG, "loadImage:onCancelled", databaseError.toException());

        }
    });
}

    viewPager = (ViewPager)findViewById(R.id.viewpager);
    adapter = new ViewPagerAdapter(gameActivity.this,images);
    viewPager.setAdapter(adapter);
}

Адаптер ViewPager

public class ViewPagerAdapter extends PagerAdapter {
Activity activity;
ArrayList<String> images;
LayoutInflater inflater;

public ViewPagerAdapter(Activity activity, ArrayList<String> images) {
    this.activity = activity;
    this.images = images;
}

@Override
public int getCount() {
    return images.size();
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    return view == object;
}

@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    inflater = (LayoutInflater) activity.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View itemview = inflater.inflate(R.layout.viewpager_item, container, false);

    ImageView image;
    image = (ImageView) itemview.findViewById(R.id.imageView);
    DisplayMetrics dis = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(dis);
    int height = dis.heightPixels;
    int width = dis.widthPixels;
    image.setMinimumHeight(height);
    image.setMinimumWidth(width);

    try {
        Glide.with(activity.getApplicationContext())
                //.using(new FirebaseImageLoader())
                .load(images.get(position))  //This is were you put the storageReference
                .into(image);
    } catch (Exception ex) {

    }

    //notifyDataSetChanged();
    container.addView(itemview);
    return itemview;

}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((View) object);
}

}

1 Ответ

0 голосов
/ 12 октября 2018

Чтобы правильно получить все эти URL-адреса, пожалуйста, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference gameRef = rootRef.child("game");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String url = ds.getValue(String.class);
            Log.d("TAG", url);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
gameRef.addListenerForSingleValueEvent(valueEventListener);

Выходными данными в вашем logcat будут все эти URL-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...