0

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);
}
}
halfer
  • 19,824
  • 17
  • 99
  • 186
  • As i see you got the value, `-KkonCYNZV6BX5BmWUI`. What's the problem? – Alex Mamo May 23 '17 at 18:52
  • @AlexMamo : value -KkonCYNZV6BX5BmWUI not saved to variable "hasilKey". So, this code doesn't work : dbAmbilDataProduk=FirebaseDatabase.getInstance().getReference().child("DataBisnis").child(hasilKey).child("DataProduk"); – Jabbar Queenson May 23 '17 at 19:04
  • When you use `Log.i("ResultKeyAmbilKey=",hasilKey);` inside `onDataChange()` works? – Alex Mamo May 23 '17 at 19:11
  • @AlexMamo. This coding works well and displays the correct value. But I do not know why not saved variable "hasilKey". – Jabbar Queenson May 23 '17 at 19:26

1 Answers1

1

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.

halfer
  • 19,824
  • 17
  • 99
  • 186
Alex Mamo
  • 130,605
  • 17
  • 163
  • 193
  • Could you help me to make the coding that i need because after visit post i confused. Previously i very grateful for you sir. – Jabbar Queenson May 23 '17 at 19:43
  • As i mentioned in my answer, the easiest way is to use that variable `inside the onDataChange() method` and do there what you need to do with it. – Alex Mamo May 23 '17 at 19:45
  • Pardon me, i am beginner use firebase. After i see the post. I very confused sir. Could you make that code i need to getvalue to variable? – Jabbar Queenson May 23 '17 at 19:56
  • Jabbar you said that this code `Log.i("ResultKeyAmbilKey=",hasilKey);` works fine inside your `onDataChange()` method. So inside that method, use `hasilKey` to what you need to do with it. Don't try to use it outside, until you don't understand completely how things works. – Alex Mamo May 23 '17 at 19:59