Database Vấn đề Firebase khó hiểu

Thảo luận trong 'Android nâng cao' bắt đầu bởi Tùng Phạm, 9/11/16.

  1. Tùng Phạm

    Tùng Phạm New Member

    Lượt xem: 640
    Chào các bạn, mình đang bị một lỗi trong Firebase như này (New Firebase nha, không phải Legacy Firebase).

    Đây là class Character của mình:

    Mã:
    public class Character {
    	private int charID;
    	private String charName;
     
    	public Character() {
    	}
     
    	public Character(String charName, int charID) {
    		this.charName = charName;
    		this.charID = charID;
    	}
     
    	public int getCharID() {
    		return charID;
    	}
     
    	public void setCharID(int charID) {
    		this.charID = charID;
    	}
     
    	public String getCharName() {
    		return charName;
    	}
     
    	public void setCharName(String charName) {
    		this.charName = charName;
    	}
     
    	public void getCharByID(int charID)
    	{
    		DatabaseReference mData = FirebaseDatabase.getInstance().getReference();
    		mData.child("char").orderByChild("charID").equalTo(charID).addChildEventListener(new ChildEventListener() {
    			@Override
    			public void onChildAdded(DataSnapshot dataSnapshot, String s) {
    				Character nv = dataSnapshot.getValue(Character.class);
    				setCharID(nv.getCharID());
    				setCharName(nv.getCharName());
    			}
     
    			@Override
    			public void onChildChanged(DataSnapshot dataSnapshot, String s) {
     
    			}
     
    			@Override
    			public void onChildRemoved(DataSnapshot dataSnapshot) {
     
    			}
     
    			@Override
    			public void onChildMoved(DataSnapshot dataSnapshot, String s) {
     
    			}
     
    			@Override
    			public void onCancelled(DatabaseError databaseError) {
     
    			}
    		});
    	}
    }
    Còn đây là MoveActivity để gọi hàm getCharByID();
    Mã:
    protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_move);
     
    		Character c = new Character();
    		c.getCharByID(3);
    		tv = (TextView) findViewById(R.id.txtMoveTitle);
    		tv.setText(c.getCharName());
    }
    }
    Khi mình gọi hàm getCharByID(3) ở MoveActivity, giá trị của Character c sẽ được cập nhật từ firebase. Nhưng khi mình đổ ra TextView thì TextView lại trống trơn. Khó hiểu quá. Có ai biết về vấn đề này không ạ?
  2. anhtdatz

    anhtdatz New Member


    Kinh nghiệm du lịch Đà Nẵng xin chia sẻ với các bạn những món ăn ngon nổi tiếng tại Đà Nẵng. Dưới đây là danh sách các địa chỉ quán ăn ngon và giá cả phải chăng nhất được chọn lọc từ nhận xét của khách.

    1.Bánh Xèo

    - Quán bánh xèo Bà Dưỡng (K280/23, Hoàng Diệu, Quận Hải Châu)

    - Quán Cô Mười (23 Châu Thị Vĩnh Tế, Quận Ngũ Hành Sơn)

    - Quán Bánh Xèo Tôm Nhảy (140 Nguyễn Đức Trung, Quận Thanh Khê)

    [​IMG]



    2. Thịt heo cuốn bánh tráng

    - Nhà hàng Trần (4 Lê Duẩn, Quận Hải Châu)

    - Quán Mậu (35 Đỗ thúc Tịnh, Quận Cẩm Lệ)

    - Quán Đại Lộc (97 Trưng Nữ Vương, Quận Hải Châu)

    - Quán Quê Nhà (K72/1C Hàm Nghi)

    - Quán Bà Hường (364 2 tháng 9, Quận Hải Châu)

    [​IMG]



    3. Bê thui Cầu Mống

    [​IMG]

    - Quán Ngọc Lan ( 895 Ngô Quyền, Quận Sơn Trà)

    - Quán Bê Thui Cầu Mống (100 Điện Biên Phủ, Quận Thanh Khê)

    - Quán Bê Thui Cầu Mống Quế Sơn (224 Nguyễn Tri Phương, Quận Hải Châu)

    - Quán Bê Thui Cầu Mống Lợi (12 Ngô Thì Nhậm, Quận Liên Chiểu, Đà Nẵng)

    - Bê Thui Cầu Mống Huynh Đệ (14B Phạm Văn Đồng, Quận Sơn Trà)
  3. kimthangatm

    kimthangatm New Member

    Bạn gọi như thế này bị sai rồi:

    Hàm getCharByID là chạy Async (Bất đồng bộ) nên sau khi gọi hàm đó, đối tượng c vẫn chưa thể có giá trị. Bạn nên tìm hiểu sự khác nhay về đồng bộ và bất đồng bộ. Sau đó tìm hiểu mô hình MVP trong Android, nó sẽ giải quyết các vấn đề này rất hiệu quả

    Trong trường hợp này bạn có thể thử nhanh bằng cách này xem: public void getCharByID(int charID) cần thêm 1 tham số là Text view mTextview (Tức là text view cần thay text ý)

    trong onChildAdded thì bạn gán mTextview.setText( Giá trị nhận đc xem sao)

Chia sẻ trang này