2017-08-14 53 views
0

我想从firebase数据库的business_info节点下的PjSxhQXCyXdSv07LxVzU7buvhkF2中读取'resName'和'status'值,如here尝试在空对象引用上调用虚方法 - Firebase数据库android

我不断收到此错误:

Attempt to invoke virtual method 'java.lang.String com.example.android.project_water.Utilities.RestaurantInformation.getResName()' on a null object reference.

有谁知道如何解决这个问题?请让我知道是否需要更多信息。

代码:

public class Info extends Fragment { 

     private DatabaseReference mDatabase; 
     private FirebaseAuth firebaseAuth; 
     private String businessID; 
     private TextView resNameChange, statusChange; 

     public Info() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

      View rootView = inflater.inflate(R.layout.fragment_info, container, false); 

      SharedPreferences businessID1 = getActivity().getSharedPreferences("BUSINESS_ID", Context.MODE_PRIVATE); 
      businessID = businessID1.getString("businessID", "businessIDNotFound"); 
      Log.i("BUSINESS KEY IS: ", businessID); 

      firebaseAuth = FirebaseAuth.getInstance(); 
      mDatabase = FirebaseDatabase.getInstance().getReference(); 

      resNameChange = rootView.findViewById(R.id.resNameChange); 
      statusChange = rootView.findViewById(R.id.statusChange); 

      mDatabase.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        showData(dataSnapshot); 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 

      return rootView; 
     } 

     public void showData(DataSnapshot dataSnapshot) { 

      if (dataSnapshot.child("business_info").child(businessID).exists()) { 
       for (DataSnapshot ds : dataSnapshot.getChildren()) { 
        RestaurantInformation resInfo = new RestaurantInformation(); 
//error on the line below****** 
        resInfo.setResName(ds.child(businessID).getValue(RestaurantInformation.class).getResName()); 
        resInfo.setStatus(ds.child(businessID).getValue(RestaurantInformation.class).getStatus()); 

        resNameChange.setText(resInfo.getResName()); 
        statusChange.setText(resInfo.getStatus()); 
       } 
      } else { 
       resNameChange.setText("NAME"); 
       statusChange.setText("ONLINE"); 
      } 

     } 

    } 

我的模型

public class RestaurantInformation { 

    private String resName; 
    private String status; 

    public RestaurantInformation() { 

    } 

    public RestaurantInformation(String resName) { 
     this.resName = resName; 
    } 

    public RestaurantInformation(String resName, String status) { 
     this.resName = resName; 
     this.status = status; 
    } 

    public String getResName() { 
     return resName; 
    } 

    public void setResName(String resName) { 
     this.resName = resName; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 
} 
+0

I /业务键:: PjSxhQXCyXdSv07LxVzU7buvhkF2 – ben

回答

1

您当前的代码被下载整个数据库,然后试图弄清楚如何显示的客户端。这对用户带宽的使用非常浪费。我建议只监听业务,你有兴趣:

mDatabase = FirebaseDatabase.getInstance().getReference(); 
mDatabase.child("business_info").child(businessID).addValueEventListener(new ValueEventListener() { 

然后你就可以简化您的showData方法:

public void showData(DataSnapshot snapshot) { 

    if (snapshot.exists()) { 
     RestaurantInformation resInfo = snapshot.getValue(RestaurantInformation.class) 

     resNameChange.setText(resInfo.getResName()); 
     statusChange.setText(resInfo.getStatus()); 
    } else { 
     resNameChange.setText("NAME"); 
     statusChange.setText("ONLINE"); 
    } 

} 
+0

非常有帮助!谢谢! – ben

相关问题