我想将Firebase经过身份验证的用户(在输入正确的用户名和密码后)添加到ListView。为了更好地理解这里是我的应用程序的流程。
Here is the image of first layout when app starts
1-当用户点击“添加患者”按钮时,该应用会重定向到另一项活动,其中必须输入正确的电子邮件和密码
2-成功登录后,应用程序再次打开上一个活动(添加患者活动)并将登录用户添加到ListView。这是添加患者的xml
<TextView
android:layout_width="match_parent"
android:layout_height="59dp"
android:layout_alignParentTop="true"
android:id="@+id/addpatient"
android:gravity="center"
android:drawableLeft="@drawable/ic_add_circle_outline_black_48dp"
android:drawablePadding="-170dp"
android:textStyle="bold"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="Add Patient"
android:layout_marginTop="57dp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/addpatient"
android:background="#000" />
<ListView
android:id="@+id/listpatient"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_weight="1"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:longClickable="true"
android:layout_marginTop="119dp"
android:layout_alignParentBottom="true">
</ListView>
请注意,我不想从Firebase数据库获取用户列表,我使用firebase身份验证而不是firebase数据库。这是添加患者活动的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_patient);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar1);
setSupportActionBar(toolbar);
auth = FirebaseAuth.getInstance();
addPatient = (TextView)findViewById(R.id.addpatient);
listPatient = (ListView)findViewById(R.id.listpatient);
arrayList = new ArrayList<String>();
if(patient == null)
{
Toast.makeText(getApplicationContext(),"No user found",Toast.LENGTH_SHORT).show();
}
else
{
patient = FirebaseAuth.getInstance().getCurrentUser();
arrayList.add(String.valueOf(patient));
}
adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);
listPatient.setAdapter(adapter);
adapter.notifyDataSetChanged();
addPatient.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent it = new Intent(AddPatient.this,DoctorPanel_Signin.class);
startActivity(it);
}
});
问题是listview没有显示任何数据。如果我删除IF语句,应用程序崩溃是因为尝试在空指针上引用虚拟方法引用类似的东西。而我想的另一件事是,如果我想添加3个用户,那么firebaseaut.getinstance.getcurrentuser将始终返回1个用户,并将一次又一次地覆盖以前的用户,请同样考虑。
答案 0 :(得分:0)
这种情况正在发生,因为您在验证患者对象之前是否patient == null
进行验证。因此,换句话说,patient object
始终为空。要解决这个问题,您需要更改if语句的逻辑,如下所示:
FirebaseAuth.AuthStateListener authListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null) {
Log.d("TAG", "You are signed in Firebase!");
arrayList.add(String.valueOf(patient));
} else {
Log.d("TAG", "You are signed out from Firebase!");
}
}
};
您的数据库应如下所示:
Firebase-root
|
--- Users
|
--- userUid1
| |
| --- signedInSuccessfully: false
|
--- userUid2
|
--- signedInSuccessfully: true //changes after signed in successfully