2016-06-26 7 views
2

I firebase realtimeデータベースにオブジェクトを追加できませんでした。私は次のコードを試しました。しかし、このコードが実行されるときuserRef.child( "Users")。child(Integer.toString(random.nextInt(100)))。setValue(newUser); 私のアプリがクラッシュします。firebaseデータベースにオブジェクトを保存する方法は?

public class MainActivity extends AppCompatActivity { 

    private FirebaseAuth mAuth; 
    private DatabaseReference userRef; 
    EditText nameEditText; 
    EditText passEditText; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     nameEditText = (EditText) findViewById(R.id.nameEditText); 
     passEditText = (EditText) findViewById(R.id.passEditText); 

     mAuth = FirebaseAuth.getInstance(); 
     //  signInAnonymously(); 
       mAuth.signInAnonymously().addOnFailureListener(new OnFailureListener() { 
        @Override 
        public void onFailure(@NonNull Exception e) { 

        } 

        public void onFailure(Throwable throwable) { 
         throw new RuntimeException(throwable); 
        } 
       }); 
    } 
    public void createUser(View view){ 

     Random random = new Random(); 



     userRef = FirebaseDatabase.getInstance().getReference(); 



     String userN = String.valueOf(nameEditText.getText()); 
     String pass = String.valueOf(passEditText.getText()); 


     UserDetails newUser = new UserDetails(userN,pass); 

     userRef.child("Users").child(Integer.toString(random.nextInt(100))).setValue(newUser); 


    } 
@IgnoreExtraProperties 
public class UserDetails{ 

    public String userName; 
    public String password; 

    public UserDetails(){ 

    } 

    public UserDetails(String userName, String userPass){ 

     this.userName = userName; 
     this.password = userPass; 
     Log.i("Check", this.userName); 

    } 

    public String getUserName() { 
     return userName; 
    } 

    public String getPassword() { 
     return password; 
    } 
} 
} 

これはlogcatエラーメッセージです。

E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.crossappfactory.username, PID: 20144 
java.lang.IllegalStateException: Could not execute method for android:onClick 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
at android.view.View.performClick(View.java:4785) 
at android.view.View$PerformClick.run(View.java:19884) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5343) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
        Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
at android.view.View.performClick(View.java:4785)  
at android.view.View$PerformClick.run(View.java:19884)  
at android.os.Handler.handleCallback(Handler.java:739)  
at android.os.Handler.dispatchMessage(Handler.java:95)  
at android.os.Looper.loop(Looper.java:135)  
at android.app.ActivityThread.main(ActivityThread.java:5343)  
at java.lang.reflect.Method.invoke(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:372)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)  
        Caused by: com.google.firebase.database.DatabaseException: Invalid key: this$0. Keys must not contain '/', '.', '#', '$', '[', or ']' 
at com.google.android.gms.internal.zzaiw.zziv(Unknown Source) 
at com.google.android.gms.internal.zzaiw.zzau(Unknown Source) 
at com.google.firebase.database.DatabaseReference.zza(Unknown Source) 
at com.google.firebase.database.DatabaseReference.setValue(Unknown Source) 
at com.crossappfactory.username.MainActivity.createUser(MainActivity.java:63) 
at java.lang.reflect.Method.invoke(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:372)  
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
at android.view.View.performClick(View.java:4785)  
at android.view.View$PerformClick.run(View.java:19884)  
at android.os.Handler.handleCallback(Handler.java:739)  
at android.os.Handler.dispatchMessage(Handler.java:95)  
at android.os.Looper.loop(Looper.java:135)  
at android.app.ActivityThread.main(ActivityThread.java:5343)  
at java.lang.reflect.Method.invoke(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:372)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

+0

適切な解析のために、UserDetailモデルは同じパラメータを使用するため、userPassをパスワードに置き換えるか、その逆にします。ちょうど同じ命名法を使用してください。 – uguboz

答えて

7

ソリューションは簡単ですコンパイラが余分なフィールドを生成しませんので、静的UserDetailsクラスをマーク:これは、あなたが興味を持っている場合には、必要とされる理由の

public static class UserDetails { 

説明。

エラーメッセージには、何か問題があると表示されますが、この場合は解析が難しいです: "無効なキー:この$ 0キーには '/'、 '。'、 '#'、 '$' '['、 ']'」

UserDetailsオブジェクトへの参照であるthis$0と表示されています。 $0は、その内部クラスがMainActivityであることを示します。内部クラスを作成すると、そのクラスのインスタンスには、そのオブジェクトを含む隠しフィールドが追加されるため、コードUserDetailsからthis.MainActivityと言うことができます。しかし、Firebase SDKはこの余分な隠しフィールドを処理できないため、例外が発生します。

+0

クラスをstaticとして宣言して、オブジェクトをfirebaseに追加します。 –

+0

よろしくお願いします!私の答えが役に立つなら、その左側のupvoteボタンをクリックしてください。あなたの質問に答えた場合は、チェックマークをクリックしてそれを受け入れます。そうすれば、他の人はあなたが(十分に)助けられたことを知ることができます。 –

+0

どのようにKotlinでそれを処理するには? –

0

代わりに乱数を生成するので、プッシュ()はまた、あなたのcreateUserメソッドを呼び出しているを使用してみては?あなたのアプリケーションがクラッシュしたときにlogcatの詳細を追加することができます。これにより、問題を簡単に見つけることができます。

+0

お返事ありがとうございます。私はアクティビティからSubmitボタンからcreateUser()メソッドを呼び出します。私も** push()**メソッドで試しました。私はどちらもうまくいきません。 –

+0

質問にlogcatの詳細を貼り付けることはできますか? –

+0

'原因:com.google.firebase.database.DatabaseException:無効なキー:この$ 0。キーには '/'、 '。'、 '#'、 '$'、 '['、 ']'が含まれていてはなりません。これはエラーを引き起こしている可能性があります。 –

関連する問題