2017-04-18 4 views
1

으로 변환 할 수 없습니다. 책을 추가하고 책 목록을 볼 수있는 간단한 라이브러리 앱을 만들고 있습니다. 여기 Firebase java.lang.String 유형의 객체를

내 책 클래스

public class Book { 

private int _id; 
private String _bookTitle; 
private String _bookAuthor; 
private int _bookISBN; 

private Map<String, Object> mp; 

public Book() { 

} 

public Book(String _bookTitle, String _bookAuthor, int _bookISBN) { 
    this._id = _id; 
    this._bookTitle = _bookTitle; 
    this._bookAuthor = _bookAuthor; 
    this._bookISBN = _bookISBN; 

} 

public int get_id() { 
    return _id; 
} 

public void set_id(int _id) { 
    this._id = _id; 
} 

public String get_bookTitle() { 
    return _bookTitle; 
} 

public void set_bookTitle(String _bookTitle) { 
    this._bookTitle = _bookTitle; 
} 

public String get_bookAuthor() { 
    return _bookAuthor; 
} 

public void set_bookAuthor(String _bookAuthor) { 
    this._bookAuthor = _bookAuthor; 
} 

public int get_bookISBN() { 
    return _bookISBN; 
} 

public void set_bookISBN(int _bookISBN) { 
    this._bookISBN = _bookISBN; 
} 


public Map<String, Object> toMap() { 
    mp = new HashMap<>(); 
    mp.put("bookTitle", this._bookTitle); 
    mp.put("bookAuthor", this._bookAuthor); 
    mp.put("bookISBN", this._bookISBN); 


    return mp; 
} } 

이며, 여기에 이미 중포 기지

snapshot of firebase

public class ViewBook extends AppCompatActivity { 


ArrayList<String> myArrayList = new ArrayList<>(); 

final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference ref = database.getReference(); 
// DatabaseReference mPostReference = ref.child("books"); 
DatabaseReference temp = ref.child("books"); 

ArrayAdapter<String> adapter; 

@Override 
public void onStart(){ 
    super.onStart(); 


    ValueEventListener postListener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
       Book book = postSnapshot.getValue(Book.class); 

       myArrayList.add(book.get_bookTitle() + "\n" + book.get_bookAuthor() + "\n" + book.get_bookISBN()); 


      } 

      ListView lv = (ListView)findViewById(R.id.list); 
      adapter = new ArrayAdapter<String>(ViewBook.this, android.R.layout.simple_list_item_1, myArrayList); 
      lv.setAdapter(adapter); 
     } 


     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      //Getting Post failed, log a message 
      Log.w("VIEWBOOKS", "loadPost:onCancelled", databaseError.toException()); 

     } 
    }; 
    temp.addValueEventListener(postListener); 
} 

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

내가 오류에 기록 된 값에서 읽을 시도하고있는 곳입니다 점점 :

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.taylorcampos.androidfirebasedatabase, PID: 25339 
       com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.taylorcampos.androidfirebasedatabase.Book 
        at com.google.android.gms.internal.zzbtg.zze(Unknown Source) 
        at com.google.android.gms.internal.zzbtg.zzb(Unknown Source) 
        at com.google.android.gms.internal.zzbtg.zza(Unknown Source) 
        at com.google.firebase.database.DataSnapshot.getValue(Unknown Source) 
        at com.example.taylorcampos.androidfirebasedatabase.ViewBook$1.onDataChange(ViewBook.java:38) 
        at com.google.android.gms.internal.zzbpx.zza(Unknown Source) 
        at com.google.android.gms.internal.zzbqx.zzZT(Unknown Source) 
        at com.google.android.gms.internal.zzbra$1.run(Unknown Source) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

누군가 이런 일이 발생하는 이유와 내가 firebase에 담긴이 책들을 열거 할 수있는 목록보기를 얻는 방법을 설명하십시오.

+0

"books"는 실제로 하나의 'Book'입니다. 'bookAuthor' (String)를'Book' (문자열이 아니고 String에서 읽을 수없는)으로 변환하려고하면 코드가 실패합니다.'books'는 코드가 작동하도록 JsonObjects 배열을 포함해야합니다. –

답변

1

dataSnapshot.getChildren()은 도서의 속성 목록을 반환하지만 Book 개체는 반환하지 않습니다. 그 중 하나가 문자열이므로 오류가 발생합니다.

데이터베이스에 다른 수준의 데이터가 필요하거나 저장하는 것이 모두 책 목록 인 경우 child("books")을 제거하고 문자열 "books" 대신 생성 된 고유 키를 사용하십시오

또한 Firebase은 Java 클래스의 밑줄과 같지 않은 camelCase 메소드 및 변수 (데이터베이스의 것과 비슷 함)를 사용하여 필드를 설정하려고합니다. 즉 일치해야합니다.

관련 문제