【问题标题】:Using variables value outside the method [duplicate]在方法之外使用变量值[重复]
【发布时间】:2023-04-01 08:47:01
【问题描述】:

我坚持在方法之外传递变量值。示例:

usernameRef = FirebaseDatabase.getInstance().getReference().child("Users").child(uid).child("Name");
    usernameRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String createdByName = dataSnapshot.getValue().toString();
            }

我想进一步使用收到的方法值:textview.setText(createdByName)。

还有一个例子:

ServiceSpin.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                if(parent.getItemAtPosition(position).equals("Pick a service name")){

                }
                else{

                    String ServiceName = parent.getItemAtPosition(position).toString();
                }
            }

在我想要的方法之外:

AddRequest items = new AddRequest(ServiceName);
FirebaseDatabase.getInstance().getReference("Requests").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(items)

由于我不知道使用局部变量更正确,但我无论如何都不知道如何在方法之外获取此值。

【问题讨论】:

  • 对不起,你的问题一点都不清楚。请不要解释您的代码应该做什么,而是:显示更多代码,例如minimal reproducible example
  • 也许 something like this 就是你要找的东西
  • 除此之外:你想了解局部变量和字段的区别。
  • 我觉得这里的代码足够了。我在方法中从数据库中获取值,并希望在方法之外使用这个值(例如在 textview 中)。但是好的,我可以添加更多
  • 您只需要在代码顶部定义所有这些变量。 string strName 然后在任何你想要的地方定义它的价值。这样整个代码都可以访问该变量。

标签: java android android-studio firebase-realtime-database


【解决方案1】:

您可以做的是创建一个名为“GlobalVars”之类的新 Java 类

在那个班级你可以做类似的事情

public static String value1 = "";
public static String value2 = "";
public static String value3 = "";
public static String value4 = "";

在你的主类中

usernameRef = FirebaseDatabase.getInstance().getReference().child("Users").child(uid).child("Name");
usernameRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            GlobalVars.value1 = dataSnapshot.getValue().toString();
        }

您可以在项目中的任何位置调用该 var,如下所示:

textview.setText(GlobalVars.value1).

【讨论】:

  • 这并不能解决问题。对数据库的调用不是同步的。它可能需要任何时间才能完成。在从服务器返回值之前使用变量将没有用
  • 哦,是的,我在想它,这正是我想要的,除了我想从数据库中读取数据,如名称并在类和方法中使用它。但据我了解,我可以在 auth 上读取这些数据并将它们传递给这个类,对吧?
  • 这不会解决你的问题@QuqAuq
  • @a_local_nobody 是的,现在我明白了,我仍然无法在方法之外传递值,所以我需要另一种方式
  • 您可以添加一个 while 循环来检查 value == "" Thread.sleep(1000)。有点讨厌。否则,创建一个代码方法,并且只有在你从 db 中获得值时才调用该方法
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多