2016-07-19 13 views
0

我這裏有一個代碼..這是com.firebase.client.FirebaseException:未能反彈鍵入JSON

main_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) { 

      } 
     }); 
    } 

Execption:

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: [email protected]; 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 whi ch是即時通知正確但問題是當我試圖連接在我的firebase它給了我這個錯誤..我試圖改變變量real_id值爲數字,它工作正常,但當它取決於JSON它給了我一個錯誤..請幫助我:d

這是對我的snapchat火力 enter image description here

+0

real_id是int還是string? –

+0

它與id爲 –

+0

的字符串相同,爲什麼不使用新的firebase quires? –

回答

0

請點擊此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); 
+0

我可否知道你從哪裏獲得郵政?我需要申報嗎? –

+0

post實際上是您從服務器獲得的數據類,您可以在類中定義post類和一個字符串,其名稱與您從文件庫獲取的名稱相同,並且該字符串的getter和setter函數也是如此。 –

+0

我可以知道如何定義該職位?請幫助我,我真的想完成這個即時通訊只是新這個android工作室和JSON –

0

您存儲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()

然而,我建議堅持一個統一的類型在列表中。它會讓你的代碼更容易出錯並且更容易理解。

+0

我試圖改變你的答案..我試圖改變條件,條件1,條件2,條件3 .. 。現在的問題,這是我的新語法mref = new Firebase(「https://connection-4f6d8.firebaseio.com/condition」+ real_id); ...現在的問題是..變化的是孩子「的條件「不是孩子」的條件「+ real_id –