Android-встраивание единства: способы инициализации и вызова объекта SQLite java DB из единства, который нуждается в «контексте»? - PullRequest
0 голосов
/ 26 июня 2018

У меня есть вспомогательный класс 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();
    }

Я хочу инициализировать эту игру DBHelper на стороне Unity и оттуда вызвать, скажем, database.insert (...);
Из документации Unity я узнал, что можно инициализировать объект для вызова его методов:

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


Я думаю, что, возможно, я должен сначала инициализировать "gameDBHelper = new GameDbHelper (this);" в деятельности Unity:
- экспортировать проект Unity в Android Studio
- в UnityPlayerActivity определите объект и инициализируйте его
- «как-то» вызвать его из кода Unity (определяется перед экспортом)

Другой подход:
- экспортировать класс базы данных в виде библиотеки из студии Android в Unity

мне удобнее в Android-студии, потому что в этом проекте Unity не должна быть активностью запуска.

Пожалуйста, научите меня, как правильно это сделать.

1 Ответ

0 голосов
/ 27 июня 2018

Я пытаюсь задокументировать соответствующие части моего собственного решения, на случай, если это кому-нибудь поможет. Пожалуйста, если вы видите какие-либо проблемы в этом, дайте мне знать (я только учусь).

Я не знал, что мог бы передать (ввести) "Context" в конструктор класса Java, который в этом нуждается, со стороны Unity. Я нашел это на этом форуме, спасибо форуму!
Сторона единства:

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;

Это передаст контекст в конструктор класса java студии Android, который затем инициализирует базу данных 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:
Ссылка на документацию по SQLiteOpenHelper.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...