我有一个带有GridView的简单主活动,每个项目都有一个TextView,我想用Firebase数据库中存储的每个项目的内容之一填充。当我调用getValue()时出现问题。应用程序崩溃,我收到以下错误:
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);
}
}
答案 0 :(得分:0)
解决这个问题已经有很长时间了,但是我想答案也可以帮助其他人。我使用tableGridAdapter和相邻的onItemClickListener代替了valueEventListener。解决我的问题的代码如下(我省略了该问题未涉及的部分代码):
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();
}
});
}
}