2017-08-07 7 views
0

私はfirebaseからデータを取得するアプリケーションを構築しています。 のデータをアクティビティに表示するには、firebaseからデータを取得するアクティビティ に移動中にエラーが表示されます。firebaseからデータを取得しています:FirebaseException:タイプにバウンスできませんでしたか?


後のゲッターとセッターです。これは私のfirebaseのスクリーンショットであるメインクラスのJavaコード..

public class Main2Activity extends AppCompatActivity { 
private EditText editTextName; 
private EditText editTextAddress; 
private TextView textViewPersons; 
private Button buttonSave; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    buttonSave = (Button) findViewById(R.id.buttonSave); 
    buttonSave = (Button) findViewById(R.id.buttonSave); 
    editTextName = (EditText) findViewById(R.id.editTextName); 
    editTextAddress = (EditText) findViewById(R.id.editTextAddress); 

    textViewPersons = (TextView) findViewById(R.id.textViewPersons); 

    Firebase.setAndroidContext(this); 

    //Click Listener for button 
    buttonSave.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Creating firebase object 
      Firebase ref = new Firebase(Config.FIREBASE_URL); 

      //Getting values to store 
      String name = editTextName.getText().toString().trim(); 
      String address = editTextAddress.getText().toString().trim(); 

      //Creating Person object 
      Person person = new Person(); 

      //Adding values 
      person.setName(name); 
      person.setAddress(address); 

      //Storing values to firebase 
      ref.child("Person").setValue(person); 

      //Value event listener for realtime data update 
      ref.child("Person").addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot snapshot) { 
        for (DataSnapshot postSnapshot : snapshot.getChildren()) { 
         //Getting the data from snapshot 
         Person person = postSnapshot.getValue(Person.class); 

         //Adding it to a string 
         String string = "Name: "+person.getName()+"\nAddress: "+person.getAddress()+"\n\n"; 

         //Displaying it on textview 
         textViewPersons.setText(string); 
        } 
       } 

       @Override 
       public void onCancelled(FirebaseError firebaseError) { 
        System.out.println("The read failed: " + firebaseError.getMessage()); 
       } 
      }); 

     } 
    }); 

} 

public class Person { 

//name and address string 
private String name; 
private String address; 

public Person() { 
    /*Blank default constructor essential for Firebase*/ 
} 
//Getters and setters 
public String getName() { 
    return name; 
} 

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

public String getAddress() { 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 

"ピープルオブジェクト" .. enter image description here

アプリのクラッシュログ

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.dell.database, PID: 22852 
       com.firebase.client.FirebaseException: Failed to bounce to type 
        at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185) 
        at com.example.dell.database.Main2Activity$1$1.onDataChange(Main2Activity.java:60) 
        at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45) 
        at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 
        at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 
        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:5910) 
        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:1405) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 
       Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.example.dell.database.Person] from String value; no single-String constructor/factory method 
        at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator._createFromStringFallbacks(StdValueInstantiator.java:428) 
        at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:299) 
        at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1056) 
        at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:136) 
        at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:123) 
        at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) 
        at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) 
        at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) 
        at com.example.dell.database.Main2Activity$1$1.onDataChange(Main2Activity.java:60)  
        at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45)  
        at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)  
        at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)  
        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:5910)  
        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:1405)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)  

I /プロセス:送信信号。 PID:22852 SIG:9 アプリケーションが終了しました。名前と住所を表示するには

+0

投稿にクラッシュログを含めてください。あなたのonDataChangeの – UmarZaii

+0

はすでにpersonオブジェクト内にあります。getValueを使用してsnapShotから直接データを読み込む必要があります –

答えて

0

次のコードを使用してください:

ref.child("Person").addValueEventListener(new ValueEventListener() { 
@Override 
public void onDataChange(DataSnapshot snapshot) { 
    String name = postSnapshot.child("name").getValue(String.class); 
    String address = postSnapshot.child("address").getValue(String.class); 
    String string = "Name: "+name+"\nAddress: "+address+"\n\n"; 

    //Displaying it on textview 
    textViewPersons.setText(string); 
} 

@Override 
public void onCancelled(FirebaseError firebaseError) { 
    System.out.println("The read failed: " + firebaseError.getMessage()); 
} 
}); 
0

データベースに人物を書くとき、あなたのようにそれを書く:

//Storing values to firebase 
ref.child("Person").setValue(person); 

これは一人の書き込みを行いますデータベースの中で、コンソールのスクリーンショットにも示されています。あなたは、データを読み込むとき

、あなたが実行します。Personノードの子の上に

ref.child("Person").addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
     for (DataSnapshot postSnapshot : snapshot.getChildren()) { 
      Person person = postSnapshot.getValue(Person.class); 

      String string = "Name: "+person.getName()+"\nAddress: "+person.getAddress()+"\n\n"; 

      //Displaying it on textview 
      textViewPersons.setText(string); 
     } 
    } 

だからループを。あなたはデータベースに1人の人しか書いていないので、そのループは必要なく、実際にはコードを破壊します。ところで、

public void onDataChange(DataSnapshot snapshot) { 
    Person person = postSnapshot.getValue(Person.class); 

    String string = "Name: "+person.getName()+"\nAddress: "+person.getAddress()+"\n\n"; 

    //Displaying it on textview 
    textViewPersons.setText(string); 

} 

あなたはFirebaseのかなり古いバージョンを使用している:これを正しく行うには、ループを削除します。私は、あなたがもっと助けを得る可能性が高いからといっても、より新しいバージョンにアップグレードすることをお勧めします。アップグレードするには、こちらをご覧ください:https://firebase.google.com/support/guides/firebase-android

関連する問題