Проблема при извлечении данных из Firebase: com.google.firebase.database.DatabaseException: не удалось преобразовать значение типа java.util.ArrayList в строку - PullRequest
0 голосов
/ 12 апреля 2019

Я новичок в Firebase и пытался получить доступ к данным из базы данных Firebase Realtime в Android.

это данные: MY FIREBASE DATA

Иниже приведен код

пакета com.manju.wista.fb_database;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.Toast;
import com.google.firebase.FirebaseApp;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.GenericTypeIndicator;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    DatabaseReference dbr;
    JSONObject jsonObject;
    JSONArray jArray;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        dbr = FirebaseDatabase.getInstance().getReference("BUSES_DATA/0");

        dbr.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                GenericTypeIndicator<Map<String, String>> genericTypeIndicator = new GenericTypeIndicator<Map<String, String>>() {};
                Map<String, String> map = dataSnapshot.getValue(genericTypeIndicator );

                Toast.makeText(getApplicationContext(),map.get("origin") , Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


    }

    @Override
    protected void onStart() {
        super.onStart();

    }
}

Когда я запускаю код с

dbr = FirebaseDatabase.getInstance().getReference("BUSES_DATA/0"); 
or
dbr = FirebaseDatabase.getInstance().getReference("BUSES_DATA/1");

, я получаю сообщение об ошибке

если я бегу с

dbr = FirebaseDatabase.getInstance().getReference("BUSES_DATA/2");

, то оно поднимает значение

.. Может кто-нибудь помочь, пожалуйста

1 Ответ

1 голос
/ 13 апреля 2019

Вы пытаетесь извлечь Map<String, String> из снимка.

Если вы слушаете BUSES_DATA/2, это работает, потому что каждое свойство в BUSES_DATA/2 имеет простое строковое значение.

Если вы слушаете BUSES_DATA/0 или BUSES_DATA/1, это не получается, так какнекоторые из дочерних узлов не являются простыми строками.В частности, BUSES_DATA/*/json_content является вложенным объектом JSON.Поскольку вложенный объект JSON не является строкой, база данных выдает ошибку, когда вы просите его преобразовать его.

Как только решение состоит в извлечении Map<String, Object> из этих снимков.Вы обнаружите, что в первых двух дочерних узлах эта карта содержит ключ json_content, в качестве значения которого содержится еще один Map<String, Object>.

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