2017-09-17 90 views
0

我是Firebase的新手。我试图保存从Android发送到实时数据库的POJO。com.google.firebase.database.DatabaseException:不支持字符,请字符串

我有这样的POJO:

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

和活动是这样的:

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) 

我可以”:

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

后来我一点击该按钮出现此错误找出我的代码有什么问题。我遵循Firebase official website和其他教程的教程。我仔细地跟着他们,我已经尝试了很多次。我搜索了几个小时,但没有希望。

希望能从这个社区得到一些解决方案或建议。 非常感谢:)

+1

'TestActivity.java:56' ...什么是在该行? –

+0

对不起,我显示错误的错误代码。我编辑过它。 @ cricket_007 – Victor

+0

再次,这条线是什么? –

回答

0

我面临同样的问题,当我在它的构造函数中初始化对象的元素,而不传递它的值。像:

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

}

然后我把它改为:

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

使用下面MainActivity线推POJO中FireBaseDataBase:

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

这对我的作品现在有了Firebase数据库。希望这也能帮助你。

相关问题