Как установить значение ProgressBar, используя этот код? - PullRequest
0 голосов
/ 18 января 2019

В моем документе есть два значения, которые помогут мне установить индикатор выполнения в приложении.для бывших присоединившихся и слотов.оба числа.

и ниже я выбираю значения и устанавливаю значение индикатора выполнения, используя слоты и объединенный номер, которые я выбрал из магазина:

public class Home extends AppCompatActivity {
    private FirebaseFirestore mDatabase;
    private FirestoreRecyclerAdapter adapter;
    RecyclerView recyclerView;

    @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();
    }

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        FirebaseAuth mAuth = FirebaseAuth.getInstance();
        FirebaseUser mUser = mAuth.getCurrentUser();
        mDatabase = FirebaseFirestore.getInstance();

        recyclerView = findViewById(R.id.rv);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        if (mUser != null) {
            fetch();
        } else {
            Intent intent = new Intent(Home.this, Login.class);
            startActivity(intent);
            finish();
        }
    }

private void fetch() {
            Query query = mDatabase.collection("batches");
            FirestoreRecyclerOptions<batches> options = new FirestoreRecyclerOptions.Builder<batches>()
                    .setQuery(query, new SnapshotParser<batches>() {
                        @NonNull
                        @Override
                        public matches parseSnapshot(@NonNull DocumentSnapshot snapshot) {
                            return new matches(                             
                                    snapshot.getLong("slots"),
                                    snapshot.getLong("joined")
                            );
                        }
                    }).build();

            adapter = new FirestoreRecyclerAdapter<batches,BatchHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull BatchHolder holder, int position, @NonNull batches model) {
                    holder.progressBar.setProgress(model.getJoined().intValue()/model.getSlots().intValue()*100);
                }

                @NonNull
                @Override
                public BatchHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_items,viewGroup,false);
                    return new BatchHolder(view);
                }
            };
            recyclerView.setAdapter(adapter);
        }
public class BatchHolder extends RecyclerView.ViewHolder {
            ProgressBar progressBar;
            public BatchHolder(@NonNull View itemView) {
                super(itemView);
                progressBar = itemView.findViewById(R.id.progressBar);
            }
        }  

и в batches.class:

public class batches {
    private Long slots, joined;

    public matches(Long slots, Long joined) {
        this.slots = slots;
        this.joined = joined;
    } 

    public Long getSlots() {
        return slots;
    }

    public void setSlots(Long slots) {
        this.slots = slots;
    }

    public Long getJoined() {
        return joined;
    }

    public void setJoined(Long joined) {
        this.joined = joined; 
    }

, но когда я запускаю приложение, появляется следующая ошибка:

    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setProgress(int)' on a null object reference
        at app.Home$2.onBindViewHolder(Home.java:109)
        at app.Home$2.onBindViewHolder(Home.java:100)
        at com.firebase.ui.firestore.FirestoreRecyclerAdapter.onBindViewHolder(FirestoreRecyclerAdapter.java:125)
        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
        at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752).... so on
...