RecyclerView无法正常工作

时间:2017-05-23 18:46:20

标签: android firebase firebase-realtime-database android-recyclerview

我希望你理解我编码中的错误。我想从函数“ambilKey()”中检索值以获取“hasilKey”的值。 “hasilKey”是我的firebase数据库结构的节点。

MyPictureDatabaseFirebase:

MyPictureDatabaseFirebase

MyPictureResultLog:

MyPictureResultLog

值-KkonCYNZV6BX5BmWUI未保存到变量“hasilKey”。因此,此代码不起作用: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);
}
}

1 个答案:

答案 0 :(得分:1)

您不能像onDataChange()方法那样使用该变量。发生这种情况是因为onDataChange()是异步调用的。这意味着您的方法在调用onDataChange之前执行。这就是为什么没有显示正确的值。因此,为了使用该变量,您需要在onDataChange()方法中使用它。

对于其他方法,请访问此post和此post。您将更好地了解事情是如何运作的。