gpt4 book ai didi

java - Firestore ui 适配器错误 java.lang.NullPointerException : 'void com. firebase.ui.firestore.FirestoreRecyclerAdapter.startListening()

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:18 25 4
gpt4 key购买 nike

firestore 回收器适配器 没有获取任何数据,我发现了上述错误。我搜索过,但没有人给出明确的答案。

  • 我使用 EditText 和图像按钮进行搜索。
  • 我正在使用身份验证,因此我不会这样做,这是否会影响我的回收适配器。
  • 如果 request.auth !=null,则 Firebase 规则设置为:读取、写入因为我有身份验证。

这是代码:

public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private FirebaseAuth mAuth;
private FirebaseFirestore mFirestore;
private CircleImageView mProfileimage;
private TextView mProfilepsuedo, mProfileEmail;
private String mUserID;
private EditText searchID;
private ImageButton searchbtn;
private RecyclerView pharmacienlist;
private FirestoreRecyclerAdapter < Pharmacien, PharmacieViewHolder > myadapter;


@Override
protected void onStart() {
super.onStart();
FirebaseUser mCurrentuser = mAuth.getCurrentUser();
if (mCurrentuser == null) {
sendTologin();
}
myadapter.startListening();

}

@Override
protected void onStop() {
super.onStop();
myadapter.stopListening();
}

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

mFirestore = FirebaseFirestore.getInstance();
mAuth = FirebaseAuth.getInstance();
searchID = (EditText) findViewById(R.id.SearchID);
searchbtn = (ImageButton) findViewById(R.id.search_go_btn);
pharmacienlist = (RecyclerView) findViewById(R.id.listpharmacies);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

searchbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

String searchquery = searchID.getText().toString();
firebasePharmaciesearch(searchquery);
}
});

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent photointent = new Intent(MainActivity.this, PhotoActivity.class);
startActivity(photointent);
}
});

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}

private void firebasePharmaciesearch(String searchquery) {
Toast.makeText(this, "La recherche est en cours", Toast.LENGTH_SHORT).show();
Query query = FirebaseFirestore.getInstance()
.collection("Pharmaciens")
.orderBy("AdressePH")
.limit(10).startAt(searchquery).endAt("\u8fff");
FirestoreRecyclerOptions < Pharmacien > options = new FirestoreRecyclerOptions.Builder < Pharmacien > ()
.setQuery(query, Pharmacien.class)
.build();
myadapter = new FirestoreRecyclerAdapter < Pharmacien, PharmacieViewHolder > (options) {
@NonNull
@Override
public PharmacieViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.listlayout, parent, false);
return new PharmacieViewHolder(view);
}

@Override
protected void onBindViewHolder(@NonNull PharmacieViewHolder holder, int position, @NonNull Pharmacien model) {
holder.setName(model.getNomSiege());
holder.setAdresse(model.getAdressePH());
holder.setDistance(String.valueOf(model.getPosition().getLatitude()));
holder.setUserImage(model.getImageURL(), getApplicationContext());

//to get key

holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

}
});
}

};
pharmacienlist.setAdapter(myadapter);
}

@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
mUserID = mAuth.getCurrentUser().getUid();
mProfileimage = (CircleImageView) findViewById(R.id.Clientprofile_id);
mProfilepsuedo = (TextView) findViewById(R.id.Clientpseudo_id);
mProfileEmail = (TextView) findViewById(R.id.ClientEmail_id);

getMenuInflater().inflate(R.menu.main, menu);

mFirestore.collection("Clients").document(mUserID).get().addOnSuccessListener(new OnSuccessListener < DocumentSnapshot > () {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
String pseudo = documentSnapshot.getString("Pseudo");
String Email = documentSnapshot.getString("Email");
String user_image = documentSnapshot.getString("Image");
mProfilepsuedo.setText(pseudo);
mProfileEmail.setText(Email);
RequestOptions placheholder = new RequestOptions();
placheholder.placeholder(R.drawable.loginimage);
Glide.with(MainActivity.this).setDefaultRequestOptions(placheholder).load(user_image).into(mProfileimage);
}
});
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();

if (id == R.id.nav_gallery) {
// Handle the gallery action
} else if (id == R.id.nav_profile) {
//handle the profile action
Intent profileintent = new Intent(MainActivity.this, Profileactivity.class);
startActivity(profileintent);

} else if (id == R.id.nav_logout) {
//handle the logout action
AlertDialog.Builder a_builder = new
AlertDialog.Builder(MainActivity.this);
a_builder.setMessage("Voulez-vous déconnecter?")
.setCancelable(false)
.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mAuth.signOut();
Intent loginIntent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(loginIntent);
Toast.makeText(MainActivity.this, "Déconnexion réussite", Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("Non", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
AlertDialog alert = a_builder.create();
alert.setTitle("Deconnexion");
alert.show();
}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
private void sendTologin() {
Intent loginintent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(loginintent);
finish();
}
public class PharmacieViewHolder extends RecyclerView.ViewHolder {
View mView;
public PharmacieViewHolder(View itemView) {
super(itemView);
mView = itemView;

}
public void setName(String name) {
TextView userNameView = (TextView) mView.findViewById(R.id.NomSiege);
userNameView.setText(name);
}
public void setAdresse(String status) {
TextView userAdresseView = (TextView) mView.findViewById(R.id.Adresseph);
userAdresseView.setText(status);
}
public void setDistance(String distance) {
TextView userdistanceView = (TextView) mView.findViewById(R.id.Distance);
userdistanceView.setText(distance);
}
public void setUserImage(String ImageURL, Context ctx) {
CircleImageView userImageView = (CircleImageView) mView.findViewById(R.id.ProfileImageID);
Glide.with(ctx).load(ImageURL).into(userImageView);
}

}

}

更新感谢您的帮助,我解决了 null 问题,我的另一个问题是我在 recyclerview 中没有得到任何结果。
这是 firestore ui 问题吗???;

以下是从 Firebase 获取信息的类:

public class Pharmacien  {
private String AdressePH,NomSiege,ImageURL;
private static String Type;
private Double Rating;
private GeoPoint Position;

public Pharmacien(String AdressePH, String NomSiege, String ImageURL, Double Rating, GeoPoint Position, String Type) {
this.AdressePH = AdressePH;
this.ImageURL = ImageURL;
this.NomSiege = NomSiege;
this.Position = Position;
this.Rating = Rating;
this.Type=Type;

}

public Pharmacien() {
}

public String getAdressePH() {
return AdressePH;
}

public void setAdressePH(String adressePH) {
AdressePH = adressePH;
}

public String getNomSiege() {
return NomSiege;
}

public void setNomSiege(String nomSiege) {
NomSiege = nomSiege;
}


public String getImageURL() {
return ImageURL;
}

public void setImageURL(String imageURL) {
ImageURL = imageURL;
}

public static String getType() {
return Type;
}


public Double getRating() {
return Rating;
}

public void setRating(Double ratingGlobal) {
Rating = ratingGlobal;
}

public GeoPoint getPosition() {
return Position;
}

public void setPosition(GeoPoint position) {
Position = position;
}

}

解决方案-_- 布局管理器就足够了对于遇到此问题的每个人

 pharmacienlist.setHasFixedSize(true);
pharmacienlist.setLayoutManager(new LinearLayoutManager(this));

最佳答案

它是 null,因为您在 onCreate() 内初始化了它,然后您在 onStart() 内编写了 myadapter.startListening();(位于 onCreate() 之前)

因此,要么在 onStart() 中初始化它:

@Override
protected void onStart() {
super.onStart();
FirebaseUser mCurrentuser = mAuth.getCurrentUser();
if (mCurrentuser == null) {
sendTologin();
}
myadapter = new FirestoreRecyclerAdapter<Pharmacien, PharmacieViewHolder>(options) {
@NonNull
@Override
public PharmacieViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.listlayout, parent, false);
return new PharmacieViewHolder(view);
}

@Override
protected void onBindViewHolder(@NonNull PharmacieViewHolder holder, int position, @NonNull Pharmacien model) {
holder.setName(model.getNomSiege());
holder.setAdresse(model.getAdressePH());
holder.setDistance(String.valueOf(model.getPosition().getLatitude()));
holder.setUserImage(model.getImageURL(), getApplicationContext());

//to get key



holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {


}
});
}

};
pharmacienlist.setAdapter(myadapter);
myadapter.startListening();

}
}

或者只需在 onCreate() 内的 pharmacienlist.setAdapter(myadapter); 之后添加 myadapter.startListening();

关于java - Firestore ui 适配器错误 java.lang.NullPointerException : 'void com. firebase.ui.firestore.FirestoreRecyclerAdapter.startListening(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50079411/

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