Jabbar Queenson
Jabbar Queenson

Reputation: 5

RecyclerView not working

I hope you understand the errors in my coding. I want to retrieve value from function "ambilKey()" to get the value for "hasilKey". "hasilKey" is the node of my firebase database structure.

MyPictureDatabaseFirebase:

MyPictureDatabaseFirebase

MyPictureResultLog:

MyPictureResultLog

value -KkonCYNZV6BX5BmWUI not saved to variable "hasilKey". So, this code doesn't work: dbAmbilDataProduk=FirebaseDatabase.getInstance().getReferenc‌​e().child("DataBisni‌​s").child(hasilKey).‌​child("DataProduk").

public class IbuActivity extends AppCompatActivity {
private Fireb][1]aseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference mCekBisnis_Id;
private String nilaiBisnis="error";
private String hasilKey="error";
private RecyclerView mProdukList;
private DatabaseReference dbAmbilKeyPengguna;
private DatabaseReference dbAmbilDataProduk;


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ibu);
    Log.i("Aktivitas :","OnCreate");



    mAuth=FirebaseAuth.getInstance();


    cekAkunBisnis();

    //Retrieve Value hasilKey is my problem
    ambilKey();
    //Check Value
    Log.i("Result=",hasilKey);
    //Not working function ambilkey() ?????
    dbAmbilDataProduk=FirebaseDatabase.getInstance().getReference().child("DataBisnis").child(hasilKey).child("DataProduk");


    mProdukList=(RecyclerView) findViewById(R.id.ibuRvProduk);
    mProdukList.setHasFixedSize(true);
    mProdukList.setLayoutManager(new LinearLayoutManager(this));
}


private void ambilKey() {
    dbAmbilKeyPengguna=FirebaseDatabase.getInstance().getReference().child("DataPengguna").child(mAuth.getCurrentUser().getUid()).child("BisnisId");
    dbAmbilKeyPengguna.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            hasilKey=dataSnapshot.getValue(String.class);
            Log.i("ResultKeyAmbilKey=",hasilKey);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Log.i("Pesan","DatabaseError");
        }
    });
}

@Override
public void onStart() {
    super.onStart();



    FirebaseRecyclerAdapter<AmbilDataProduk,ProdukViewHolder> firebaseRecyclerAdapter=new FirebaseRecyclerAdapter<AmbilDataProduk, ProdukViewHolder>(
            AmbilDataProduk.class,
            R.layout.listprodukrow,
            ProdukViewHolder.class,
            dbAmbilDataProduk
    ) {
        @Override
        protected void populateViewHolder(ProdukViewHolder viewHolder, AmbilDataProduk model, int position) {
            viewHolder.setNamaProduk(model.getNamaProduk());
            viewHolder.setHargaProduk(model.getHargaProduk());
            viewHolder.setFotoProduk(getApplicationContext(),model.getFotoProduk());
        }
    };
    mProdukList.setAdapter(firebaseRecyclerAdapter);
}

public static class ProdukViewHolder extends RecyclerView.ViewHolder{
    View view;

    public ProdukViewHolder(View itemView) {
        super(itemView);
        view=itemView;
    }

    public void setNamaProduk(String namaProduk){
        TextView buNamaProduk=(TextView) view.findViewById(R.id.prowTvNama);
        buNamaProduk.setText(namaProduk);
    }
    public void setHargaProduk(String hargaProduk) {
        TextView kelolaHargaProduk=(TextView) view.findViewById(R.id.prowTvHarga);
        kelolaHargaProduk.setText("Harga : Rp."+hargaProduk);
    }
    public void setFotoProduk(final Context ctx, final String fotoProduk){
        final ImageView imageViewFotoProduk=(ImageView) view.findViewById(R.id.prowIvFoto);
        //Picasso.with(ctx).load(fotoProduk).into(imageViewFotoProduk);
        Picasso.with(ctx).load(fotoProduk).networkPolicy(NetworkPolicy.OFFLINE).into(imageViewFotoProduk, new Callback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {
                Picasso.with(ctx).load(fotoProduk).into(imageViewFotoProduk);
            }
        });
    }
}

//Cek Akun sudah Login Jika sudah login apakah sudah terdaftar / punya bisnis
private void cekAkunBisnis() {
    //CekAkunLogin
    if(mAuth.getCurrentUser()!=null){
        mCekBisnis_Id= FirebaseDatabase.getInstance().getReference().child("DataPengguna").child(mAuth.getCurrentUser().getUid()).child("BisnisId");
        mCekBisnis_Id.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                nilaiBisnis=dataSnapshot.getValue(String.class);
                //Cek sudah punya bisnis belum?
                if(!nilaiBisnis.equals("belumada")){
                    //Sudah ada
                }
                else if(nilaiBisnis.equals("error")){

                }
                else{
                    //Belum ada
                    Intent bisnisIntent=new Intent(IbuActivity.this, BisnisActivity.class);
                    //Data activitynya dilupakan
                    bisnisIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(bisnisIntent);
                    Toast.makeText(IbuActivity.this, "Selamat Datang. Silahkan Isi nama Bisnis Anda", Toast.LENGTH_SHORT).show();

                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Toast.makeText(IbuActivity.this, "Database Error!!!", Toast.LENGTH_SHORT).show();
            }
        });
    }
    else{
        //User tidak ada
        Intent loginRegister=new Intent(IbuActivity.this, LoginRegister.class);
        loginRegister.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(loginRegister);
    }
}


//Membuat menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_tambahproduk, menu);
    return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId()==R.id.actionTambahProduk){
        startActivity(new Intent(IbuActivity.this,KelolaProduk.class));
    }
    return super.onOptionsItemSelected(item);
}
}

Upvotes: 0

Views: 264

Answers (1)

Alex Mamo
Alex Mamo

Reputation: 138814

You cannot use that variable outside the onDataChange() method in the way you do. This is happening because onDataChange() is called asynchronously. This means that your method is executed before onDataChange has been called. That's why is not displaying the correct value. So in order to use that variable, you need to use it inside the onDataChange() method.

For other approach, please visit this post and this post. You'll understand for sure better how things works.

Upvotes: 1

Related Questions