2016-08-03 12 views
0

Ich arbeite an Android Chat-Projekt und ich habe eine ListView, die ich möchte, dass die Messages durch Firebase List Adapter auffüllen. Jetzt, nachdem ich den Code ausgeführt habe, stürzt die App ab.Fehler beim Ablegen zum Schreiben mit FirebaseListadAdpter

Ich versuche mehrere Möglichkeiten, um es ohne Erfolg zu lösen. Ist meine Vorstellung falsch und ich sollte eine andere Methode verwenden? Anyway-

Die Ausnahme ist:

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.example.giat.myapplication.ChatMessage] from String value; no single-String constructor/factory method 

Dies ist der Hauptcode in MainActivity.java ist:

Firebase.setAndroidContext(this); 
    mFirebaseRef = new Firebase("https://chat-as31da.firebaseio.com"); 

    Button sendBtn = (Button) findViewById(R.id.button); 
    final EditText MessageTxt = (EditText) findViewById(R.id.edit_message); 
sendBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      String text =MessageTxt.getText().toString(); 
      ChatMessage message = new ChatMessage("Android User", text); 
      mFirebaseRef.push().setValue(message); 
      MessageTxt.setText(""); 

     } 
    }); 

    final ListView listView = (ListView) this.findViewById(android.R.id.list); 
    mListAdapter = new FirebaseListAdapter<ChatMessage>(this,ChatMessage.class,android.R.layout.two_line_list_item,mFirebaseRef) { 
     @Override 
     protected void populateView(View v, ChatMessage model, int position) { 
      ((TextView)v.findViewById(android.R.id.text1)).setText(model.get_name()); 
      ((TextView)v.findViewById(android.R.id.text2)).setText(model.get_messag()); 
     } 
    }; 
    listView.setAdapter(mListAdapter); 


} 

Und das ist die POJO:

public class ChatMessage { 

private String _name; 
private String _message; 

public ChatMessage() {} 

public ChatMessage(String _name,String _message) { 
    this._name = _name; 
    this._message = _message; 
} 

public String get_name() { 
    return _name; 
} 

public String get_message() { 
    return _message; 
    } 
} 

JASON Snippet von Daten:

{ 
"_message" : "hi there", 
"_name" : "sam" 
} 

Vielen Dank für Ihre Hilfe!

+0

Können Sie ein Schnipsel des JSON (als Text, keine Bilder) bei 'mFirebaseRef' zeigen? –

+0

Ich habe das Snippet von JSON hinzugefügt und bearbeite die Verbindung in MainActivity.java. Vielen Dank für Ihre Hilfe! :) –

+0

Ich denke, die Namen, die mit einem Unterstrich beginnen, können hier Probleme für Jackson verursachen. Probieren Sie diese einfachste mögliche Klasse aus: 'public class ChatMessage {public String _name; öffentliche Zeichenfolge _Nachricht; } '(also ohne Getters/Setter). –

Antwort

0

Zunächst einmal fand ich, dass ich auf Firebase-Datenbank wie diese verbinden muß:

 mFirebaseRef = new Firebase("https://<stack-overflow>.firebaseio.com/mychat"); 

Zweitens, die Jackson Problem (Namen beginnend mit Unterstrich), mit Hilfe von @Frank van Puffelen zu lösen Ich fand, dass ich ChatMessage Klasse als statisch in MainActivity machen muss und die Setter/Getter löschen.

Oder

Ich kann nur @JsonProperty hinzufügen, bevor meine Variablen Deklaration und der Getter in ChatMessage Klasse.

Verwandte Themen