运行此代码时,加载进度条后Apps崩溃。使用该代码,我试图在卡片视图中显示Firebase中的图像。一切正常,直到从数据库完全加载图像后我添加代码以隐藏进度栏。
请提出一些在我的代码中实现的方法,以便在从数据库中完全加载图像时删除进度条
package com.example.ananthu.currentaffairs;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import android.app.ProgressDialog;
import android.view.Window;
import android.view.WindowManager;
public class NewsActivity extends AppCompatActivity {
private ProgressBar progressBar;
private RecyclerView mPeopleRV;
private DatabaseReference mDatabase;
private FirebaseRecyclerAdapter<News, NewsActivity.NewsViewHolder> mPeopleRVAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news);
progressBar = (ProgressBar)findViewById(R.id.pro);
progressBar.setVisibility(View.VISIBLE);
setTitle("News");
//"News" here will reflect what you have called your database in Firebase.
mDatabase = FirebaseDatabase.getInstance().getReference().child("News");
mDatabase.keepSynced(true);
mPeopleRV = (RecyclerView) findViewById(R.id.myRecycleView);
DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("News");
Query personsQuery = personsRef.orderByKey();
mPeopleRV.hasFixedSize();
mPeopleRV.setLayoutManager(new LinearLayoutManager(this));
FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();
mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsActivity.NewsViewHolder>(personsOptions) {
@Override
protected void onBindViewHolder(NewsActivity.NewsViewHolder holder, final int position, final News model) {
holder.setImage(getBaseContext(), model.getImage());
}
@Override
public NewsActivity.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_row, parent, false);
return new NewsActivity.NewsViewHolder(view);
}
};
mPeopleRV.setAdapter(mPeopleRVAdapter);
}
@Override
public void onStart() {
super.onStart();
mPeopleRVAdapter.startListening();
}
@Override
public void onStop() {
super.onStop();
mPeopleRVAdapter.stopListening();
}
public static class NewsViewHolder extends RecyclerView.ViewHolder{
private ProgressBar progressBar;
View mView;
public NewsViewHolder(View itemView){
super(itemView);
mView = itemView;
}
public void setImage(Context ctx, String image){
ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
Picasso.with(ctx).load(image).into(post_image,new Callback() {
@Override// This the place where problem occcurs
public void onSuccess() {
progressBar.setVisibility(View.GONE);
}
@Override
public void onError() {
}
});
}
}
}
[The image shows the Logcat when I run the code][1]
[1]: https://i.stack.imgur.com/5uP4n.png
答案 0 :(得分:0)
不需要NewsViewHolder类中的进度条 您可以像下面的代码一样使用静态进度栏:
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import ir.pofelak.dialer.R;
public class NewsActivity extends AppCompatActivity {
public static ProgressBar progressBar;
private RecyclerView mPeopleRV;
private DatabaseReference mDatabase;
private FirebaseRecyclerAdapter<News, NewsActivity.NewsViewHolder> mPeopleRVAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news);
progressBar = (ProgressBar)findViewById(R.id.pro);
progressBar.setVisibility(View.VISIBLE);
setTitle("News");
//"News" here will reflect what you have called your database in Firebase.
mDatabase = FirebaseDatabase.getInstance().getReference().child("News");
mDatabase.keepSynced(true);
mPeopleRV = (RecyclerView) findViewById(R.id.myRecycleView);
DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("News");
Query personsQuery = personsRef.orderByKey();
mPeopleRV.hasFixedSize();
mPeopleRV.setLayoutManager(new LinearLayoutManager(this));
FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<News>().setQuery(personsQuery, News.class).build();
mPeopleRVAdapter = new FirebaseRecyclerAdapter<News, NewsActivity.NewsViewHolder>(personsOptions) {
@Override
protected void onBindViewHolder(NewsActivity.NewsViewHolder holder, final int position, final News model) {
holder.setImage(getBaseContext(), model.getImage());
}
@Override
public NewsActivity.NewsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_row, parent, false);
return new NewsActivity.NewsViewHolder(view);
}
};
mPeopleRV.setAdapter(mPeopleRVAdapter);
}
@Override
public void onStart() {
super.onStart();
mPeopleRVAdapter.startListening();
}
@Override
public void onStop() {
super.onStop();
mPeopleRVAdapter.stopListening();
}
public static class NewsViewHolder extends RecyclerView.ViewHolder{
View mView;
public NewsViewHolder(View itemView){
super(itemView);
mView = itemView;
}
public void setImage(Context ctx, String image){
ImageView post_image = (ImageView) mView.findViewById(R.id.post_image);
Picasso.with(ctx).load(image).into(post_image,new Callback() {
@Override// This the place where problem occcurs
public void onSuccess() {
progressBar.setVisibility(View.GONE);
}
@Override
public void onError() {
}
});
}