Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用getValue调用Firebase时,在类org.json.JSONObject上找不到要序列化的属性_Java_Android_Json_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 使用getValue调用Firebase时,在类org.json.JSONObject上找不到要序列化的属性

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。我

我有一个简单的带有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);
     }
 }
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();
            }
        });
    }

}