首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >onclick()中的值直到下次单击时才会显示

onclick()中的值直到下次单击时才会显示
EN

Stack Overflow用户
提问于 2019-04-14 00:04:34
回答 1查看 34关注 0票数 0

我想从数据库(firebase实时数据库)中获取一些值,并使用它进行一些计算,或者在TextView中显示它,但当用户单击按钮时,我的应用程序直到下一次使用我的所有方法单击时才会获得值,无论是否使用循环。在onClick()方法之外,我可以很好地获得这些值。这是一个用于从数据库中获取数据并将其显示在onClick()中的TextView中的代码

代码语言:javascript
运行
复制
DatabaseReference myRef;
private double avgrate;
private String category;

private Button button;
private Spinner categories;
private TextView ratetxt;

protected void onCreate(Bundle savedInstanceState) {
    myRef = FirebaseDatabase.getInstance().getReference("user_account");

    //initialize
    avgrate = 0.0;
    button = (Button) findViewById(R.id.button);
    ratetxt = (TextView) findViewById(R.id.ratetxt);
    ratetxt.setVisibility(View.GONE);

    // for category adapter -- it works
    myRef.child("(username)").child("category").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            final List<String> propertyAddressList = new ArrayList<String>();
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                String propertyAddress = ds.getKey();
                if (propertyAddress != null) {
                    propertyAddressList.add(propertyAddress);
                    for (DataSnapshot ds2 : dataSnapshot.child(propertyAddress).getChildren()) {
                        String sub = (String) ds2.getValue();
                        if (sub != null && !sub.contains("null")) {
                            propertyAddressList.add(sub);
                        }
                    }
                }
            }
            categories = (Spinner) findViewById(R.id.categ);
            ArrayAdapter<String> addressAdapter = new ArrayAdapter<String>(myactivity.this, android.R.layout.simple_spinner_item, propertyAddressList);
            addressAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            categories.setAdapter(addressAdapter);
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_SHORT).show();
        }
    });

    // ON CLICK
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            category = categories.getSelectedItem().toString();

            if (category.isEmpty()) {
                    Toast.makeText(getApplicationContext(), "ERROR - CHOOSE CATEGORY", Toast.LENGTH_SHORT).show();
                } else {

                    // take average rating -- HERE IS THE PROBLEM

                    myRef.child("(username)").child("rating").child(category).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                                String str = (String) dataSnapshot.child("avg").getValue(String.class);
                                if (str != null) {
                                    avgrate = Double.parseDouble(str);
                                }
                            }
                        }
                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                            Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_SHORT).show();
                        }
                    });

                    ratetxt.setVisibility(View.VISIBLE);
                    ratetxt.setText("AVG. RATE: "+avgrate+"");

    }/*close else*/ }});// End of OnClick()
} // END OF OnCreate()

这是一个代码,当我第一次按下按钮avg时,我必须获取所选类别的平均评分,并在文本视图中设置它。下一次它将设置实值,如果我不初始化它,它将首先设置null,然后设置实际值,我不知道如何修复它

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-14 00:20:19

在button.setOnClickListener ()中的onDataChange()内添加这些行,而不是在onDataChange ()之外编写

代码语言:javascript
运行
复制
            ratetxt.setVisibility(View.VISIBLE);
            ratetxt.setText("AVG. RATE: "+avgrate+"");

下面是修改后的代码。希望这能有所帮助。

代码语言:javascript
运行
复制
                myRef.child("(username)").child("rating").child(category).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot ds : dataSnapshot.getChildren()) {
                            String str = (String) dataSnapshot.child("avg").getValue(String.class);
                            if (str != null) {
                                avgrate = Double.parseDouble(str);
                                ratetxt.setVisibility(View.VISIBLE);
                                ratetxt.setText("AVG. RATE: "+avgrate+"");
                            }
                        }
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        Toast.makeText(getApplicationContext(), "ERROR", Toast.LENGTH_SHORT).show();
                    }
                });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55667385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档