はじめてのAndroid開発

先日インターンシップに参加し、KotlinでAndroidアプリ開発をしてきた。

感想とメモが入り混じった記事ではあるが、インターンで学んだことと、これからの課題をメモとして残しておく。

スコープ関数

こいつは便利だ。まだまだ使いこなせてない感があるので、勉強して使えるようになりたい。

  • apply

これはshared preferencesに書き込む部分のコード。全部にmSharedPreferences.edit().putString(...)と書くのを省略できる。

mSharedPreferences.edit().apply {
    putString("name", mNameText.text.toString()).apply()
    putString("github", mGitText.text.toString()).apply()
    putString("twitter", mTwitterText.text.toString()).apply()
}
  • let

nullableの変数を扱う時に?をつけることがある。しかしこれを何回も使おうとすると、全部に?をつけなくてはならない。letを使うことで解決できた。

  • その他

スコープ関数は5つある。スコープ関数と調べるといっぱい出てくるので、使いこなせるようになりたい。

静的オブジェクト

C++Javaでは静的な変数や関数にstaticをつけるが、Kotlinはcompanion objectを使う。

layoutファイルのデバッグ

recycler viewが動かなくて苦戦していたら、原因はitemのレイアウトファイルのサイズ設定が間違えていた。優しいメンターさんがついてたし、調べてうまく行かなかったら質問しようね...。自分がQtで開発しているときもやっていたことだが、ロジックを何度見ても動かなかったらlayotを疑おう。attributeにbackgroundがあると思う。そこに色をつければ、もっと早く原因の切り分けができたかもしれない。テキスト表示が崩れた時とかも有効かも。

Qtでnetworkを扱う時の注意点

おそらくQNetworkAccessManagerを使うと思う。こいつはリクエストを送るとその後は非同期処理される。

そのため、変数の寿命に注意してもらいたい

呼び出し元などで関数が終わってしまうと、QNetworkAccessManagerなどがdeleteされてしまう可能性がある。リクエスト送ってからちゃんと返ってきて処理するまで、変数は生かしておこう。逆に使い終わったらちゃんとdeleteしよう。

C++のstaticメンバ変数

Javaと同じノリで書いたら動かなかった。

#include <iostream>
using namespace std;

class MyClass {
public:
    MyClass() {}

    static void set(int a) {
        mem = a;
    }

    static int get() {
        return mem;
    }

private:
    static int mem;
};

int MyClass::mem;

int main() {
    MyClass::set(3);
    cout << MyClass::get() << endl;

    return 0;
}

気をつけるのは初期化。関数やクラスの外で初期化が必要。

QMLとQtの連携

header file

#include <QObject>
#include <QQuickItem>

class Database : public QQuickItem
{
    Q_OBJECT
public:
    Database();
    Q_INVOKABLE void lend();

signals:

public slots:
};

QQuickItemのincludeと継承、QMLで呼び出すメソッドはQ_INVOKABLEをつける。

main file

***
qmlRegisterType<Database>("Database", 1, 0, "Database");
***

こいつはload前に実行する。引数の意味は調べてくれ。

qml file

Database {id: database}
onClicked: {
    database.lend()
}

good luck

pql -memo-

  • database作成

create database name;

  • table作成

create table name (name type)

  • レコード挿入

insert into table_name values (value)

  • select文

mysqlと同じかんじ

  • データベース一覧

\l

  • データベース切り替え

\c

  • テーブル削除

drop table table_name

  • レコード削除

delete from table_name where [***]