package com.resurreccion.tophe.sma;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import static com.resurreccion.tophe.sma.R.id.lv;
/**
* A simple {@link Fragment} subclass.
* Use the {@link Fragment_Profile#newInstance} factory method to
* create an instance of this fragment.
*/
public class Fragment_Profile extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private static final String TAG = "Fragment_Profile";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
public Fragment_Profile() {
// Required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment Fragment_Profile.
*/
// TODO: Rename and change types and number of parameters
public static Fragment_Profile newInstance(String param1, String param2) {
Fragment_Profile fragment = new Fragment_Profile();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
private FirebaseDatabase fd;
private FirebaseAuth fb_view;
private DatabaseReference dr;
private FirebaseAuth.AuthStateListener fbl;
private String userID;
private ListView mlist;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
//我为检索数据而感到困惑的代码的这一部分。希望您能帮助我解决这个困境。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_profile, container, false);
fb_view = FirebaseAuth.getInstance();
fd = FirebaseDatabase.getInstance();
dr = fd.getReference().child("stdb");
mlist = (ListView) getView().findViewById(R.id.lv);
FirebaseUser user = fb_view.getCurrentUser();
userID = user.getUid();
fbl = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
//Toast.makeText(Fragment_Profile.this,"Successfully signed in with: " + user.getEmail(),Toast.LENGTH_SHORT).
//show();
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
//Toast.makeText(Fragment_Profile.this,"Successfully signed out.",Toast.LENGTH_SHORT).show();
}
}
};
dr.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return view;
}
private void showData(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
UserInfo uInfo = new UserInfo();
uInfo.setStudent_num(ds.child(userID).getValue(UserInfo.class).getStudent_num()); //set the student_name
uInfo.setPassword(ds.child(userID).getValue(UserInfo.class).getPassword()); //set the password
uInfo.setLast_name(ds.child(userID).getValue(UserInfo.class).getLast_name()); //set the last_name
uInfo.setFirst_name(ds.child(userID).getValue(UserInfo.class).getFirst_name()); //set the first_name
uInfo.setMiddle_name(ds.child(userID).getValue(UserInfo.class).getLast_name()); //set the middle_name
//display all the information
Log.d(TAG, "showData: student_name: " + uInfo.getStudent_num());
Log.d(TAG, "showData: password: " + uInfo.getPassword());
Log.d(TAG, "showData: last_name: " + uInfo.getLast_name());
Log.d(TAG, "showData: first_name: " + uInfo.getFirst_name());
Log.d(TAG, "showData: middle_name: " + uInfo.getMiddle_name());
ArrayList<String> array = new ArrayList<>();
array.add(uInfo.getStudent_num());
array.add(uInfo.getPassword());
array.add(uInfo.getLast_name());
array.add(uInfo.getFirst_name());
array.add(uInfo.getMiddle_name());
ArrayAdapter adapter = new ArrayAdapter(Fragment_Profile.this.getActivity(), android.R.layout.
simple_list_item_1,
array);
mlist.setAdapter(adapter);
}
}
}
此片段用于在片段上显示ListView,但我的ListView无法从Firebase中获取数据。那里的任何人都可以帮助我。预先感谢
在ListView中运行时很难管理行列表。因此,ListView不是显示Firebase数据的好选择。尝试recylerview。这里的代码 ->非常简单的插图
您可以检查此GitHub项目,其中我使用了持有Firebase数据库数据的活动中的ListView。https://github.com/sumit0733/smart-college/blob/master/app/src/src/main/java/com/com/example/star_0733/project/project/view_doc.java
,但是要在片段中使用它类似于活动,只需在片段中的onviewCreated()方法中添加代码。