代码之家  ›  专栏  ›  技术社区  ›  Ariam1

Android嵌入Unity:从统一中初始化和调用SQLite Java DB对象的方法,需要“上下文”?

  •  1
  • Ariam1  · 技术社区  · 8 年前

    我有一个sqlite助手类,比如:

    public class GameDbHelper extends SQLiteOpenHelper {...}
    

    如果在Android Java世界中,我必须在活动的主体中初始化它,例如:

    public class MainActivity extends AppCompatActivity {
        ...
        GameDbHelper gameDBHelper;
    
        protected void onCreate(Bundle savedInstanceState) {
            ...
            gameDBHelper = new GameDbHelper(this);// "this" being the Context
    
            // database: what ultimately is needed to perform CRUD
            database = databaseHelper.getWritableDatabase();
        }
    

    我想在Unity端初始化这个gamedbhelper,从那里调用,比如,database.insert(…);
    从 Unity documentation 我了解到可以初始化一个对象来调用它的方法:

    void Start() {
        AndroidJavaObject jo = new AndroidJavaObject("android.content.res.Configuration");
        jo.Call("setToDefaults");
    }
    


    我认为我可能必须首先在Unity活动中初始化“gamedbhelper=new gamedbhelper(this);”
    -将Unity项目导出到Android Studio
    -在UnityLayerActivity中,定义对象并初始化它
    -“莫名其妙”从Unity代码调用它(在导出之前定义)

    另一种方法:
    -将数据库类作为lib从android studio导出到Unity

    在Android Studio中,这对我来说更为舒适,因为在我的这个项目中,Unity并不是启动程序活动。

    请告诉我如何正确操作。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Ariam1    8 年前

    我试着记录我自己解决方案的相关部分,以防万一,这可能会对某人有所帮助。如果你看到里面有什么问题,请告诉我(我只是在学习)。

    我不知道我可以从统一的方面将上下文“注入”到需要它的Java类的收缩器中。我在这个论坛上找到的,谢谢你!
    统一方:

    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
    AndroidJavaObject jo = new AndroidJavaObject("com.my.package.MyDbHelper", context);
    string word = jo.Call<string>("returnData");
    tx.text = word;
    

    这将把上下文传递给Android Studio Java类构造器,然后初始化SQLite数据库和一个将操作它的助手类。例如,Android Studio中的类相关数据:

    public class MySQLiteOpenHelper extends SQLiteOpenHelper {
        // implement as documentation describes, link is provided bellow
    }
    
    // this is the class, addressed from Unity
    public class MyDbHelper{
        String str = null;
        private SQLiteDatabase db;
        MySQLiteOpenHelper mySQLiteOpenHelper;
    
        public myDbHelper(Context context) {
                mySQLiteOpenHelper = new mySQLiteOpenHelper(context);
                db = mySQLiteOpenHelper.getWritableDatabase();
        }
    
        // this is the method that unity calls
        public String returnData(){
            return queryAndDisplayAll();
        }
    
        private String queryAndDisplayAll() {
                // using Cursor and db perform query and get the result, say, in a str, and return it, that is like:
                // Cursor cursor = db.query(DicSQLiteOpenHelper.TABLE_NAME,...
                // str = ...result from Curson...
                return (str == null ? "No result!" : str);
        }
    


    在这里,您可以阅读有关sqliteOpenHelper的信息:
    Link to SQLiteOpenHelper documentation.