- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
firestore 回收器适配器
没有获取任何数据,我发现了上述错误。我搜索过,但没有人给出明确的答案。
这是代码:
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/
我正在尝试为我的 Firestore 设置一个数据库,但是我尝试重新安装 pod 和许多其他东西,但我仍然无法让它工作,因为它显示了这个错误: Type 'Firestore' has no memb
我需要更改我的项目 ID,因为要验证的 Firebase 身份验证链接在链接上显示了项目 ID,并且由于品牌 reshape ,项目名称已更改。根据我发现的信息,更改项目 ID 似乎不太可能。我正在考
快速提问。长话短说,我在我的谷歌云功能日志中收到此错误: Firestore (4.10.1):无法到达 Firestore 后端。 这是我的函数文件中的代码: // pull in firebas
我正在从事 Angular 6 项目。这是我使用 --prod 构建时遇到的错误标记、主持和运行。我已经坐了很长时间了。最初认为这可能是 firestore 包的问题,我等了。但是现在更新到fir
我正在开发一个 React 项目,这是我的第一个 React 项目。此代码部署成功。但在使用 postman 测试时出现一些错误。我“发布”“createScream”函数的 URL 并发送它。然后我
我有一个包含两个集合的 Firestore 数据库:用户和锦标赛。用户具有“参与者”角色和“管理员”角色,并在用户文档中由“isParticipant”和“isAdmin” bool 值指示: /us
Firebase 数据库根据他们的文档提供了 10 MB 的离线数据库缓存限制,但没有提到 的离线数据限制。 Firestore 数据库。 Firestore 的离线数据保存限制是多少? 最佳答案 根
我正在尝试评估 string在 Firestore 安全规则 基于 matches正则表达式功能 我的代码是 username.matches('^(?!\.)(?!_)(?!.*\.$)(?!.*?
是否可以在 Firestore 中定义具有唯一约束的索引?如果没有,如何在文档字段上强制执行唯一性(不使用文档 ID)? 最佳答案 是的,这可以通过结合使用两个集合、Firestore 规则和批量写入
我正在学习 GCP,在他们的 Firestore 中,我对 Admin.firestore 和 Firebase.firestore 的区别感到困惑。 这是管理员的代码: const admin =
使用带有自定义声明的 firestore 在线安全模拟会导致错误,但它在部署时可以完美运行(同时实际处理真实请求)。错误是: Error: simulator.rules line [5], colu
所以,我知道有一些类似命名的问题,但这是不一样的。 我很想知道是否有人可以解释缺少 increment 的原因。哨兵,类似于delete一。 据我所知,字段删除与文档更新没有什么不同。意思是,我只能
我想创建两个带有分页选项的查询。在第一个记录中,我想获取前十条记录,在第二个记录中,我想获取其他所有记录: .startAt(0) .limit(10) .startAt(9) .limit(null
我正在努力为我的应用寻找最佳架构。我应该使用顶级集合、子集合、数组等吗? 设置: 我的应用程序将有许多用户将参与的测验。 每个测验都会有多个问题。 每个问题都有多个答案,只能选择一个。 每个用户只能回
我正在努力为我的应用寻找最佳架构。我应该使用顶级集合、子集合、数组等吗? 设置: 我的应用程序将有许多用户将参与的测验。 每个测验都会有多个问题。 每个问题都有多个答案,只能选择一个。 每个用户只能回
我无法在任何地方找到我可以在一个Collection中获得的文档数量的限制。假设我有1,000,000,000个文档...那有可能吗?如果我想把它们全部都拿走,实际上会给我十亿吗? 最佳答案 可以存储
假设我有一个集合 mycollection有 1,000,000 条记录。 此查询将返回多少条记录? const query = firestore.collection('mycollection'
这是错误消息:@firebase/firestore: Firestore (4.12.1): Could not reach Firestore backend 我正在构建一个网络应用程序,它今天运
我在编写和测试我的 Firestore 规则时遇到了一个奇怪的问题。这是我想要实现的目标: 当应用程序启动时,用户会匿名登录。这用户开始新游戏。 我创建了一个基本上只包含时间戳的“ session ”
我是云函数的新手。我有一些困惑。 admin.firestore 和functions.firestore? admin.database 是实时数据库吗? 因此,如果云函数基本上是用 JavaScr
我是一名优秀的程序员,十分优秀!