Java 使用getValue调用Firebase时,在类org.json.JSONObject上找不到要序列化的属性
我有一个简单的带有GridView的主活动,每个项目都有一个TextView,我想用Firebase数据库中存储的每个项目的一个内容来填充它。当我调用getValue()时,问题就出现了。应用程序崩溃,我收到以下错误:Java 使用getValue调用Firebase时,在类org.json.JSONObject上找不到要序列化的属性,java,android,json,firebase,firebase-realtime-database,Java,Android,Json,Firebase,Firebase Realtime Database,我有一个简单的带有GridView的主活动,每个项目都有一个TextView,我想用Firebase数据库中存储的每个项目的一个内容来填充它。当我调用getValue()时,问题就出现了。应用程序崩溃,我收到以下错误: com.google.firebase.database.DatabaseException: No properties to serialize found on class org.json.JSONObject 我正在使用一个自定义适配器将数据解析到GridView。我
com.google.firebase.database.DatabaseException: No properties to serialize found on class org.json.JSONObject
我正在使用一个自定义适配器将数据解析到GridView。我的代码如下:
public class MainActivity extends AppCompatActivity {
public JSONArray tables = new JSONArray();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView grid = (GridView) findViewById(R.id.table_grid);
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = firebaseDatabase.getReference("development/store_1/tables");
databaseReference.child("items").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
for (DataSnapshot child : children) {
JSONObject table = child.getValue(JSONObject.class);
tables.put(table);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
String error = databaseError.getMessage().toString();
Toast.makeText(MainActivity.this, error, Toast.LENGTH_SHORT).show();
}
});
TableAdapter tableAdapter = new TableAdapter(this, tables, 0);
grid.setAdapter(tableAdapter);
}
}
public类MainActivity扩展了AppCompatActivity{
publicjsonarray tables=newjsonarray();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView网格=(GridView)findViewById(R.id.table_网格);
FirebaseDatabase=FirebaseDatabase.getInstance();
DatabaseReference DatabaseReference=firebaseDatabase.getReference(“development/store_1/tables”);
databaseReference.child(“items”).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
Iterable children=dataSnapshot.getChildren();
for(DataSnapshot子对象:子对象){
JSONObject table=child.getValue(JSONObject.class);
表。放(表);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
字符串错误=databaseError.getMessage().toString();
Toast.makeText(MainActivity.this,error,Toast.LENGTH_SHORT).show();
}
});
TableAdapter TableAdapter=新的TableAdapter(此,表,0);
grid.setAdapter(tableAdapter);
}
}
我已经很久没有解决这个问题了,但我想答案也能帮助其他人。我没有使用valueEventListener,而是使用tableGridAdapter和相邻的onItemClickListener。解决我问题的代码如下(我省略了与问题无关的部分代码):
公共类MainMenuActivity扩展活动{
int pending=0;
JSONArray tables=新的JSONArray();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
挂起=getIntent().getIntExtra(“挂起的表”,0);
setContentView(R.layout.activity\u main\u menu\u tables);
GridView tables grid=(GridView)findViewById(R.id.main\u菜单\u tables\u grid);
SharedReferences prefs=GetSharedReferences(我的首选项名称,模式\私有);
FirebaseDatabase=FirebaseDatabase.getInstance();
DatabaseReference DatabaseReference=firebaseDatabase.getReference(prefs.getString(“mode”,“pythonanwhere”)
+“/store_”+prefs.getInt(“store_id”,0)+“/tables”);
final TableGridAdapter TableGridAdapter=新的TableGridAdapter(此,databaseReference,待定);
setAdapter(tableGridAdapter);
tableGrid.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
view.setSelected(true);
tables=tableGridAdapter.getTables();
试一试{
table=tables.getJSONObject(i).getInt(“id”);
tableName=tables.getJSONObject(i).getString(“名称”);
可用性=tables.getJSONObject(i).getInt(“活动”);
}捕获(JSONException e){
e、 printStackTrace();
}
flag=false;
createMainMenu();
}
});
}
}
能否与我们分享您的数据库结构?
public class MainMenuActivity extends Activity {
int pending = 0;
JSONArray tables = new JSONArray();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pending = getIntent().getIntExtra("Pending Table", 0);
setContentView(R.layout.activity_main_menu_tables);
GridView tablesGrid = (GridView) findViewById(R.id.main_menu_tables_grid);
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = firebaseDatabase.getReference(prefs.getString("mode", "pythonanywhere")
+ "/store_" + prefs.getInt("store_id", 0) + "/tables");
final TableGridAdapter tableGridAdapter = new TableGridAdapter(this, databaseReference, pending);
tablesGrid.setAdapter(tableGridAdapter);
tablesGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
view.setSelected(true);
tables = tableGridAdapter.getTables();
try {
table = tables.getJSONObject(i).getInt("id");
tableName = tables.getJSONObject(i).getString("name");
availability = tables.getJSONObject(i).getInt("active");
} catch (JSONException e) {
e.printStackTrace();
}
flag = false;
createMainMenu();
}
});
}
}