在Android上使用libGDX中的SQLite

11

有没有人有关于在Android上使用SQLite存储libGDX数据的技巧?我非常熟悉Android SDK中使用的技术,但是我不知道如何从libGDX调用这些Android数据库函数。我知道从libGDX调用这些函数会使我的游戏在桌面上无法使用,但我可以应对这个问题。

1个回答

13
一种方法是在您的主项目中创建一个接口,我们称其为NativeFunctions。然后让您的桌面和Android应用程序/活动实现此接口。在创建主项目时,将应用程序/活动传递给它。在主应用程序中,您保留对传递的接口的引用,并使用它来调用本地函数,您可以分别为桌面和Android实现这些函数(不会使您的游戏在桌面上无法使用,您也可以在其中使用SQLite;)。
好的,那么让我们看看它的实际应用(定义一个打开URL的函数):
界面:
public interface NativeFunctions {
    public void openURL(String url);
}

主类:

public class MyGame extends Game/ApplicationListener {
    public NativeFunctions mNativeFunctions;

    public MyGame(NativeFunctions nativeFunctions) {
        mNativeFunctions = nativeFunctions;
    }
    // Exemplary function call, of course this doesn't make sense in render() ;)
    public void render() {
        mNativeFunctions.openURL("http://www.example.com");
    }
}

Android实现:

public class MyGameActivity extends AndroidApplication implements NativeFunctions {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initialize(new MyGame(this), false);
    }
    public void openURL(String url) {
        Intent viewIntent = new Intent("android.intent.action.VIEW", 
            Uri.parse(url));
        startActivity(viewIntent);  
    }
}

桌面端实现:

public class MyGameDesktop implements NativeFunctions {
    public static void main(String[] args) {
        MyGameDesktop game = new MyGameDesktop();
        new LwjglApplication(new MyGame(game), "MyGame", 800,
             480, false);
    }
    public void openURL(String url) {
        // Your implementation to open URL on dekstop
    }
}

就是这样,你使用SQLite的实现可能应该沿用相同的方式。顺便说一下,我认为这也是整合广告框和与系统交互的方式。


2
太棒了!完美地发挥了作用!这是许多情况下必备的好知识。谢谢你的帮助。最近你似乎在回答我所有的问题哈哈。 - Alex_Hyzer_Kenoyer
2
不客气!实际上,我经常使用LibGDX,并且由于stackoverflow已经回答了很多我的问题,所以我很乐意回馈一些东西;)。 - Dominik Bucher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接