0

Ich bin Firebase neu. Ich versuche POJO zu speichern, das von Android an Realtime Database gesendet wurde.com.google.firebase.database.DatabaseException: Zeichen werden nicht unterstützt, bitte Zeichenfolgen

Ich habe eine POJO wie folgt aus:

@IgnoreExtraProperties 
public class Member implements Parcelable{ 

public String name; 

public Member() {} 

public Member(String name) { 
    this.name = name; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

/**=================== */ 
/** Parcelable section */ 
/**=================== */ 

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { 
    public Member createFromParcel(Parcel in) { 
     return new Member(in); 
    } 

    public Member[] newArray(int size) { 
     return new Member[size]; 
    } 
}; 

public Member(Parcel in){ 
    this.name = in.readString(); 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(this.name); 
} 
} 

und Aktivität wie folgt aus:

package com.example.view; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import com.google.firebase.database.DatabaseReference; 
import com.google.firebase.database.FirebaseDatabase; 

import com.example.R; 
import com.example.model.Member; 

public class TestActivity extends AppCompatActivity { 

DatabaseReference myRef; 

Button button; 
TextView text; 

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

    FirebaseDatabase.getInstance().setPersistenceEnabled(true); 
    myRef = FirebaseDatabase.getInstance().getReference(); 

    text = (TextView) findViewById(R.id.text_test); 
    button = (Button) findViewById(R.id.button_test); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      sendDataToFirebase(); 
     } 
    }); 
} 

private void sendDataToFirebase() { 
    String key = myRef.push().getKey(); 
    Member member = new Member("John"); 
    myRef.child("Member").child("john").child(key).setValue(member); 
} 
} 

Dann dieser Fehler angezeigt, nachdem ich die Schaltfläche geklickt:

E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example, PID: 16332 
com.google.firebase.database.DatabaseException: Characters are not supported, please strings 
    at com.google.android.gms.internal.zg.zzao(Unknown Source) 
    at com.google.android.gms.internal.zg.zzar(Unknown Source) 
    at com.google.android.gms.internal.zh.zzas(Unknown Source) 
    at com.google.android.gms.internal.zg.zzao(Unknown Source) 
    at com.google.android.gms.internal.zg.zzan(Unknown Source) 
    at com.google.firebase.database.DatabaseReference.zza(Unknown Source) 
    at com.google.firebase.database.DatabaseReference.setValue(Unknown Source) 
    at com.example.view.TestActivity.sendDataToFirebase(TestActivity.java:43) 
    at com.example.view.TestActivity.access$000(TestActivity.java:15) 
    at com.example.view.TestActivity$1.onClick(TestActivity.java:35) 
    at android.view.View.performClick(View.java:5714) 
    at android.widget.TextView.performClick(TextView.java:10926) 
    at android.view.View$PerformClick.run(View.java:22594) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:7325) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

ich kann‘ Finde heraus, was mit meinem Code nicht stimmt. Ich habe Tutorial von Firebase official website und andere Tutorial gefolgt. Ich bin ihnen aufmerksam gefolgt und habe es viele Male versucht. Ich habe stundenlang gegoogelt, aber keine Hoffnung.

Hope wird von dieser Community eine Lösung oder einen Rat bekommen. Vielen Dank :)

+1

'TestActivity.java: 56' ... Was ist auf dieser Linie? –

+0

Sorry, mein Fehler, ich habe einen falschen Fehlercode angezeigt. Ich habe es bearbeitet. @ cricket_007 – Victor

+0

Noch einmal, was ist in dieser Zeile? –

Antwort

0

Ich konfrontiert dasselbe Problem, wenn ich ein Element des Objekts in seinem Konstruktor initialisiert wurde, ohne den Wert dafür zu übergeben. Wie:

public class ChatMessage { 
private String messageText; 
private String messageUser; 
private String messageTime; 
private String photoURL; 

dateFormat = new SimpleDateFormat("hh:mm aa"); 

public ChatMessage() { 
} 

public ChatMessage(String messageText, String messageUser, String photoURL) { 
    this.messageText = messageText; 
    this.messageUser = messageUser; 
    this.photoURL = photoURL; 
    **this.messageTime = dateFormat.format(new Date()).toString();** 
} 


public String getMessageText() { 
    return messageText; 
} 

public void setMessageText(String messageText) { 
    this.messageText = messageText; 
} 

public String getMessageUser() { 
    return messageUser; 
} 

public void setMessageUser(String messageUser) { 
    this.messageUser = messageUser; 
} 

public String getMessageTime() { 
    return messageTime; 
} 

public void setMessageTime(String messageTime) { 
    this.messageTime = messageTime; 
} 

public String getPhotoURL() { 
    return photoURL; 
} 

public void setPhotoURL(String photoURL) { 
    this.photoURL = photoURL; 
} 

}

Dann habe ich es zu:

public class ChatMessage { 
private String messageText; 
private String messageUser; 
private String messageTime; 
private String photoURL; 


public ChatMessage() { 
} 

public ChatMessage(String messageText, String messageUser, String photoURL, String messageTime) { 
    this.messageText = messageText; 
    this.messageUser = messageUser; 
    this.photoURL = photoURL; 
    this.messageTime = messageTime; 
} 


public String getMessageText() { 
    return messageText; 
} 

public void setMessageText(String messageText) { 
    this.messageText = messageText; 
} 

public String getMessageUser() { 
    return messageUser; 
} 

public void setMessageUser(String messageUser) { 
    this.messageUser = messageUser; 
} 

public String getMessageTime() { 
    return messageTime; 
} 

public void setMessageTime(String messageTime) { 
    this.messageTime = messageTime; 
} 

public String getPhotoURL() { 
    return photoURL; 
} 

public void setPhotoURL(String photoURL) { 
    this.photoURL = photoURL; 
} 
} 

Sie mit den unten Linien in MainActivity schieben POJO in FireBaseDataBase:

 ChatMessage msg = new 
    ChatMessage(s,mUserName,null,dateFormat.format(new Date()).toString()); 
    mMessagesDatabaseReference.push().setValue(msg); 

Und das funktioniert für mich jetzt mit Firebase-Datenbank. Hoffe das hilft dir auch.

Verwandte Themen