0

Je suis nouveau à Firebase. J'essaye d'enregistrer POJO qui a envoyé d'Android à la base de données en temps réel.com.google.firebase.database.DatabaseException: Les caractères ne sont pas pris en charge, s'il vous plaît chaînes

J'ai un POJO comme ceci:

@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); 
} 
} 

Et activité comme ceci:

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); 
} 
} 

apparaissent alors cette erreur après avoir cliqué sur le bouton:

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) 

je peux » t découvrir ce qui ne va pas avec mon code. J'ai suivi le tutoriel de Firebase official website et d'autres tutoriel. Je les ai suivis avec soin et j'ai essayé plusieurs fois. J'ai googling pendant des heures, mais aucun espoir. Hope recevra des solutions ou des conseils de la part de cette communauté. Un grand merci :)

+1

'TestActivity.java: 56' ... Qu'est-ce à cette ligne? –

+0

Désolé mon mauvais, j'ai affiché le mauvais code d'erreur. Je l'ai édité. @ cricket_007 – Victor

+0

Encore une fois, ce qui est à cette ligne? –

Répondre

0

J'ai rencontré le même problème lorsque j'initialisais un élément d'objet dans son constructeur sans passer la valeur pour cela. Comme:

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; 
} 

}

Puis je l'ai changé:

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; 
} 
} 

Utiliser ci-dessous lignes MainActivity pour pousser POJO dans FireBaseDataBase:

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

Et cela fonctionne pour moi maintenant avec la base de données firebase. J'espère que ça va t'aider aussi.