gpt4 book ai didi

java - 值事件监听器返回 Null

转载 作者:行者123 更新时间:2023-11-30 00:02:22 25 4
gpt4 key购买 nike

我的数据结构

Datastructure

我正在尝试从我的数据库中使用与当前登录教师相同的电子邮件从教师那里获取 TeacherId。然后将其存储到一个字符串变量中,然后将其传递给一个适配器类以供再次查询。但每次我尝试使用 ValueEventListener 检索它时,它都会返回 null

我的代码

public class SchedList extends AppCompatActivity {

//member vars. ui objects
public ListView SubSchedListView;
public TextView schedList;
public TextView tIDTextView;

//data vars
private String email;
private String teacherid;
private ArrayList<DataSnapshot> snapshot;

//classes
private TeacherAccount ta;
private subjSchedAdapter mAdapter;

//
private DatabaseReference mDatabaseReference;
private SharedPreferences prefs;

//listener

private String x;
private String y;
private String z;

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

mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("teacheraccount").child("TeacherId");

//ui objects
SubSchedListView = (ListView) findViewById(R.id.SubSchedListView);
schedList = (TextView) findViewById(R.id.schedTextView);
tIDTextView = (TextView) findViewById(R.id.tIDTextView);

//data vars
Intent intent = new Intent();
email = intent.getStringExtra("email");
snapshot = new ArrayList<>();

}

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

Intent intent = new Intent();
Query query = mDatabaseReference.orderByChild("Email").equalTo(intent.getStringExtra("email"));

query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ta = dataSnapshot.getValue(TeacherAccount.class);
x = ta.getTeacherId(); //the part where it says it returns null
y = dataSnapshot.getValue(String.class);
if (dataSnapshot.getKey().equals("TeacherId")) {
z = dataSnapshot.getValue(String.class);
}

Log.d("WHICH_HAS", x + y + z);
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

// Setting the adapter
Log.d("WHICH_HAS", x + y + z);

//mAdapter = new subjSchedAdapter(this, mDatabaseReference,teacherid);

SubSchedListView.setAdapter(mAdapter);

}

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

mAdapter.cleanup();
}
}

哪里有问题? valueListener 应该在 Onstart 中吗? OnCreate ?还是靠它自己的功能?如果是这样,我在哪一部分调用函数?我还有哪些地方做错了?

如何将字符串数据传递给基础适配器类?

我的基础适配器类

public class subjSchedAdapter extends BaseAdapter{

private Activity mActivity;
private DatabaseReference mDatabaseReference;
private String mTeacherId;
private ArrayList<DataSnapshot> mSnapshotList;
private Query query;
private Context mContext;
// child event listener

private ChildEventListener mListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {

mSnapshotList.add(dataSnapshot);
notifyDataSetChanged();

}

@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
mSnapshotList.add(dataSnapshot);
notifyDataSetChanged();
}

@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {

}

@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {

}

@Override
public void onCancelled(DatabaseError databaseError) {

}
};


//constructor

public subjSchedAdapter(Activity activity, DatabaseReference ref, String id){

mActivity = activity;
//mTeacherId = subjteacherid;
mDatabaseReference = ref.child("subjects");

//this is where id = the teacherId I retrieved
query = mDatabaseReference.orderByChild("teacherid").equalTo(id).limitToFirst(1);

query.addChildEventListener(mListener);

mSnapshotList = new ArrayList<>();

}

//view holder

static class ViewHolder{
TextView subjectCodeAndName;
TextView time;
TextView sectionName;
TextView teacherId;
LinearLayout.LayoutParams params;
}

@Override
public int getCount() {
return mSnapshotList.size();
}

@Override
public SubjectScheds getItem(int position) {

DataSnapshot snapshot = mSnapshotList.get(position);

return snapshot.getValue(SubjectScheds.class);
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

if(convertView == null){
LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.subject_sched_list, parent, false);

final ViewHolder holder = new ViewHolder();
holder.subjectCodeAndName = (TextView) convertView.findViewById(R.id.subjectCodeAndName);
holder.time = (TextView) convertView.findViewById(R.id.time);
holder.sectionName = (TextView) convertView.findViewById(R.id.sectionName);
holder.teacherId = (TextView) convertView.findViewById(R.id.teacherid);
holder.params = (LinearLayout.LayoutParams) holder.subjectCodeAndName.getLayoutParams();
convertView.setTag(holder);
}

final SubjectScheds subjectsched = getItem(position);
final ViewHolder holder = (ViewHolder) convertView.getTag();

String subjcodeandname = subjectsched.getSubjectCode() + " - " + subjectsched.getSubjectName();
String time = "time : " + subjectsched.getTime();
String sectionName = "section : " + subjectsched.getSectionname();
String teacherId = "teacher : " + subjectsched.getTeacherid();

holder.subjectCodeAndName.setText(subjcodeandname);
holder.time.setText(time);
holder.sectionName.setText(sectionName);
holder.teacherId.setText(teacherId);

return convertView;
}

public void cleanup(){

mDatabaseReference.removeEventListener(mListener);

}

我设置适配器的代码部分

方法调用

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot finalSnap :dataSnapshot.getChildren()){
ta = finalSnap.getValue(TeacherAccount.class);
x = ta.getTeacherId(); //the part where it says it returns null

tIDTextView.setText(x);

Display(x);

}
}

方法

private void Display(String x){

mAdapter = new subjSchedAdapter(this,mDatabaseReference,x);
SubSchedListView.setAdapter(mAdapter);

}

最佳答案

如果您想通过电子邮件订购 OrderbyChiled,那么您得到了错误的数据库引用,然后您想要获取对该特定字段的父项的引用。

根据您的情况,您需要按照以下方式找到对教师帐户的引用:

mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("teacheraccount");

关于java - 值事件监听器返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49690672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com