【问题标题】:Android - Getting value from another methodAndroid - 从另一种方法中获取价值
【发布时间】:2012-04-19 11:43:18
【问题描述】:

我对 Java 还是有点陌生​​,直接进入了 Android 编程,所以我对一些编程实践有点困惑。我只是想问我如何从另一个类调用这个方法到我的 OnCreate( )?我的方法在 DBFunctions.java 中。基本上,我会在我的游戏选项中使用它。

public void checkExistence(Cursor check) {
    String sql = "SELECT * FROM option WHERE id = 1";
    check = db.rawQuery(sql, null);`
}

我想在我的 OnCreate() 中调用它。如果值存在,我只想先显示“值存在”,否则“不存在值”。如果参数内的光标是对的,还请纠正我..

【问题讨论】:

    标签: android class methods call


    【解决方案1】:

    首先,您应该在您的方法中将 Cursor 声明为局部变量。获得 Cursor 后,检查该值是否存在并返回一个布尔值。方法原型应如下所示:

    public boolean checkExistence()
    

    从 onCreate 方法中,您将按如下方式调用它:

    if (new DBFunctions().checkExistence()) {
        // do something
    } else {
       // do something else
    }
    

    【讨论】:

      【解决方案2】:

      如果你想调用任何属于其他类的方法,你可以通过引用它的类名来调用它,如下所示:::(使该函数成为静态的)

      ClassName.FunctionName() 就是这样......

      即使你可以从你的函数返回值,如果 void 使用你的返回类型...

      【讨论】:

      • 在我的情况下,它应该返回一个值.. 每当我的应用程序启动时,它都会检查选项表。我应该如何在我的 OnCreate() 中做到这一点?
      • 该值为字符串或布尔值
      【解决方案3】:

      要从另一个类调用此方法,您首先必须创建DBFunctions 的实例。那么这个方法调用的语法应该是这样的:

      Cursor mycursor = ...;
      
      DBFunctions myFunctions = new DBFunctions();
      myFunctions.checkExistence(mycursor);
      

      或者,如果您想避免创建 DBFunctions 的实例,您可以在方法声明中添加 static 关键字,例如:

      public static void checkExistence(Cursor check) {
          String sql = "SELECT * FROM option WHERE id = 1";
          check = db.rawQuery(sql, null);
      }
      

      然后您可以在没有DBFunctions 实例的情况下调用静态方法:

      DBFunctions.checkExistence(mycursor);
      

      【讨论】:

      • 在 onCreate() 中声明 mycursor 时我可以只输入一个 null 吗?
      • 我已经在 mycursor 中输入了 null 但它仍然强制关闭。我将在其中输入什么值?
      • 需要通过调用构造函数来实例化,或者通过其他方式获取。阅读 Cursor 文档 here 以了解它的工作原理。至于使用 null - 只要您不从 check 拨打电话,它应该可以工作。调用此方法后,您可能会收到 NullPointerException
      【解决方案4】:

      创建DBFunctions 的实例,然后调用checkExistence()。例如:

      DBFunctions dbfunc = new DBFunctions();
          if (dbfunc.checkExistence()) {
              /* do something */
          } else {
             /* do something else */
          }
      

      所以改变你的checkExistence() 签名:返回一个布尔值,Cursor 应该是你方法中的一个局部变量:

      public boolean checkExistence() {
          boolean exists = false;
          String sql = "SELECT * FROM option WHERE id = 1";
          Cursor cursor = db.rawQuery(sql, null);
          exists =  (cursor.getCount() > 0);
          cursor.close();
          return exists;
      }
      

      另一种选择是将static 修饰符添加到checkExistence() 并调用如下:

      if (DBFunctions.checkExistence()) {
          /* do something */
      } else {
         /* do something else */
      }
      

      【讨论】:

      • 它总是强制关闭。起初,我认为它无法处理空表,所以我添加了一个数据然后再试一次,但它仍然关闭.. 似乎是什么问题?
      • @PhilipSy 你在调用checkExistence()之前打开你的数据库了吗?
      猜你喜欢
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多