这是我的代码.我无法访问signUp集合中的用户名.我正在获得价值,但无法从外部访问.
所以请告诉我一些方法.
我也粘贴了我的数据库的快照,有两个表,我需要从中访问数据并显示然后在回收站视图中显示.需要以列表格式显示值.
Ienter image description here
@OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); recyclerVIEw=(RecyclerVIEw)findVIEwByID(R.ID.recycler); recyclerVIEw.setHasFixedSize(true); recyclerVIEw.setLayoutManager(new linearlayoutmanager(this)); ListItems=new ArrayList<>(); mAuth = FirebaseAuth.getInstance(); databaseReference= FirebaseDatabase.getInstance().getReference(); databaseReference.child("post").addValueEventListener(new ValueEventListener() { @OverrIDe public voID onDataChange(@NonNull DataSnapshot dataSnapshot) { for (DataSnapshot ds : dataSnapshot.getChildren()) { post p=ds.getValue(post.class); String user=p.getUID(); final String nh,nd; nh=p.getNewsheading(); nd=p.getNewsdiscription(); databaseReference= FirebaseDatabase.getInstance().getReference(); databaseReference.child("signUp").child(user).addListenerForSingleValueEvent(new ValueEventListener() { @OverrIDe public voID onDataChange(@NonNull DataSnapshot dataSnapshot) { signUp s=dataSnapshot.getValue(signUp.class); Toast.makeText(MainActivity.this, s.getUser(), Toast.LENGTH_SHORT).show();//want to access username from outsIDe username =s.getUser(); } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { } }); p=new post(nh,nd,username); ListItems.add(p); } ListItems.add(new post("hdfsgidsf","d,hdjh","ramu babu")) ; myAdapter adapter; adapter=new myAdapter(ListItems,getApplicationContext()); recyclerVIEw.setAdapter(adapter); } @OverrIDe public voID onCancelled(@NonNull DatabaseError databaseError) { } }); Toolbar toolbar = (Toolbar) findVIEwByID(R.ID.toolbar); setSupportActionbar(toolbar); DrawerLayout drawer = (DrawerLayout) findVIEwByID(R.ID.drawer_layout); ActionbarDrawerToggle toggle = new ActionbarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); NavigationVIEw navigationVIEw = (NavigationVIEw) findVIEwByID(R.ID.nav_vIEw); navigationVIEw.setNavigationItemSelectedListener(this); //******************************************************************************************************}
解决方法:
Firebase API是异步的,这意味着onDataChange()方法在调用之后立即返回,并且它返回的Task的回调将在稍后调用.无法保证需要多长时间.因此,在数据可用之前可能需要几百毫秒到几秒钟.因为该方法立即返回,所以您尝试在onDataChange()方法之外使用它的username变量的值将不会从回调中填充.
基本上,您尝试从异步API同步返回值.那不是个好主意.您应该按预期异步处理API.
快速解决这个问题的方法是只在onDataChange()方法中使用username字符串,否则我建议你从这个post中看到我的anwser的最后一部分,其中我已经解释了如何使用自定义回调来完成它.您还可以查看此video以获得更好的理解.
总结以上是内存溢出为你收集整理的java – 无法从Android中的外部类访问内部类数据全部内容,希望文章能够帮你解决java – 无法从Android中的外部类访问内部类数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)