【问题标题】:com.firebase.client.FirebaseException: Failed to bounce to type JSONcom.firebase.client.FirebaseException:无法反弹以键入 JSON
【发布时间】:2016-07-19 11:45:01
【问题描述】:

我这里有一个代码..这是

ma​​in_menu.java

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

private void getData(){
        String url = config.DATA_URL+a_username;
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        Log.d(TAG,"MERGING URL AND NAME SUCCESS");
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                showJSON(response);
                Log.d(TAG,"SHOW JSON SUCCESS");
            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });
        requestQueue.add(stringRequest);
}
private void showJSON(String response){

        try {
            JSONObject jsonObject = new JSONObject(response);
            JSONArray result = jsonObject.getJSONArray(config.JSON_ARRAY);
            JSONObject userid = result.getJSONObject(0);
            id = userid.getString(config.KEY_ID).toString().trim();
            Toast.makeText(getApplicationContext(),id,Toast.LENGTH_LONG).show();
            Log.d(TAG,"GETTING ID SUCCESS");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

@Override
    protected void  onStart(){
        super.onStart();
        real_id = id.toString();
        mref = new Firebase("https://connection-4f6d8.firebaseio.com/"+real_id);
        mref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String text = dataSnapshot.getValue(String.class);
                if(text.equals("UNLOCKED")){
                    sendDataonWIfi("0");
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });
    }

执行:

FATAL EXCEPTION: main Process: com.example.jaypeetan.mftis, PID: 32112com.firebase.client.FirebaseException: Failed to bounce to type
at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185)
at com.example.jaypeetan.mftis.main_menu$6.onDataChange(main_menu.java:290)
at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:56)
at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)                     at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:149)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
at dalvik.system.NativeStart.main(Native Method)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
at [Source: java.io.StringReader@22c79a40; line: 1, column: 1]
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:575)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:46)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034)
at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183)                                                                                     ... 13 more

我确实认为错误与 JSON 有关 我需要的是我的数据库中的用户 ID,它是正确的,但问题是当我尝试在我的 firebase 中连接时,它给了我这个错误。我试图更改变量 real_id 值转换为数字,它工作正常,但是当它依赖于 JSON 时,它会给我一个错误..请帮助我:D

这是我的 firebase 的 snapchat

【问题讨论】:

  • real_id 是 int 还是 string?
  • 是一个和id一样的String
  • 为什么不使用新的 firebase quires?
  • 查询是什么意思?

标签: android json firebase firebase-realtime-database


【解决方案1】:

您将String 的数字混合存储在同一个列表中。然后在你的代码中你总是要求一个字符串:

// THIS FAILS WHEN THE SNAPSHOT VALUE IS A NUMBER
String text = dataSnapshot.getValue(String.class);

这是行不通的,因为数字不是字符串(即使它可以转换为一)。

如果您坚持混合类型,则提取值的代码必须能够处理混合类型。例如:

public void onDataChange(DataSnapshot dataSnapshot) {
    String text = String.valueOf(dataSnapshot.getValue());

通过使用不带类型的dataSnapshot.getValue(),我们将获得快照中存储的任何类型。然后我们将其转换为带有String.valueOf() 的字符串。

但我建议在列表中坚持使用单一统一类型。这将使您的代码不易出错且更易于理解。

【讨论】:

  • 我试图改变你的答案..我试图将数字更改为条件、条件1、条件2、条件3......现在问题是我的新语法 mref = new Firebase ("connection-4f6d8.firebaseio.com/condition"+real_id );...现在的问题是..改变的是孩子“条件”而不是孩子“条件”+real_id
【解决方案2】:

请关注new updated Firebase documentation

将.JSON文件导入android项目,然后尝试获取这样的数据

ValueEventListener postListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        // Get Post object and use the values to update the UI
        Post post = dataSnapshot.getValue(Post.class);
        // ...
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // Getting Post failed, log a message
        Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
        // ...
    }
};
mPostReference.child(real_id).addValueEventListener(postListener);

【讨论】:

  • 我可以知道你从哪里得到的帖子吗?我需要声明吗?
  • post 实际上是您从服务器获取的数据类,您可以在该类中定义 post 类和一个与您从文件库和 getter 和 setter 函数获得的名称相同的字符串字符串。
  • 我可以知道如何定义那个帖子类吗?请帮助我,我真的很想完成这个我刚进入这个 android 工作室和 JSON
  • 请分享您的 Firebase 快照,以便我能够完全帮助您
  • 你的意思是firebase的截图??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多