java– 无法从Android中的外部类访问内部类数据

java– 无法从Android中的外部类访问内部类数据,第1张

概述这是我的代码.我无法访问signUp集合中的用户名.我正在获得价值,但无法从外部访问.所以请告诉我一些方法.我也粘贴了我的数据库的快照,有两个表,我需要从中访问数据并显示然后在回收站视图中显示.需要以列表格式显示值.Ienterimagedescriptionhere@Overrideprotected

这是我的代码.我无法访问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中的外部类访问内部类数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1102334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存