- 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/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!