我是Firebase的新手,正试图从android中的Firebase实时数据库访问数据。
下面是代码
包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");
它敬酒了
..任何人都可以帮忙
答案 0 :(得分:1)
您正在尝试从快照中提取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>
作为其值。