【问题标题】:RecyclerView not workingRecyclerView 不工作
【发布时间】:2017-05-23 18:46:20
【问题描述】:

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

MyPictureDatabaseFirebase:

我的图片结果日志:

值 -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);
}
}

【问题讨论】:

  • 我看到你得到了价值,-KkonCYNZV6BX5BmWUI。有什么问题?
  • @AlexMamo:值 -KkonCYNZV6BX5BmWUI 未保存到变量“hasilKey”。因此,此代码不起作用: dbAmbilDataProduk=FirebaseDatabase.getInstance().getReference().child("DataBisnis").child(hasilKey).child("DataProduk");
  • 当您在onDataChange() 中使用Log.i("ResultKeyAmbilKey=",hasilKey); 时有效吗?
  • @AlexMamo。此编码运行良好并显示正确的值。但我不知道为什么不保存变量“hasilKey”。

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


【解决方案1】:

您不能以您的方式在onDataChange() 方法之外使用该变量。这是因为onDataChange() 被异步调用。这意味着您的方法在调用onDataChange 之前执行。这就是为什么没有显示正确的值。因此,为了使用该变量,您需要在 onDataChange() 方法中使用它。

对于其他方法,请访问此post 和此post。你肯定会更好地理解事情是如何运作的。

【讨论】:

  • 你能帮我做我需要的编码吗,因为访问后我很困惑。以前我非常感谢您先生。
  • 正如我在回答中提到的,最简单的方法是使用该变量 inside the onDataChange() method 并在那里做你需要做的事情。
  • 对不起,我是初学者使用 firebase。看到帖子后。我很困惑先生。你能把我需要的代码写成变量吗?
  • Jabbar 你说这个代码Log.i("ResultKeyAmbilKey=",hasilKey); 在你的onDataChange() 方法中工作正常。因此,在该方法中,使用hasilKey 来执行您需要使用它的操作。不要试图在外面使用它,直到你不完全了解它是如何工作的。
猜你喜欢
  • 2016-06-05
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多