Help us understand the problem. What is going on with this article?

Amalgam でコードを整理する

More than 5 years have passed since last update.

Amalgam

https://github.com/nohana/Amalgam

Android で頻出するコードをまとめた Utility ライブラリを使って、コードの整理をする。

リソース管理

Stream I/O なら以下のように。
try-finally ブロックでストリームを閉じるときの null チェックと例外のキャッチをしてくれる。

ContentResolver resolver = context.getContentResolver();
InputStream stream = null;
try {
    stream = resolver.openInputStream(Uri.parse("content://something/to/read/1"));
    // read stream
} finally {
    CloseableUtils.close(stream);
}

Cursor は Closeable であるが、CloseableUtils を使うと具合が悪い(Closeable#close() では例外となる)ため、以下のようにする。

ContentResolver resolver = context.getContentResolver();
Cursor c = null;
try {
    c = resolver.query(uri, null, null, null, null);
} finally {
    CursorUtils.close(c);
}

Parcel

boolean に関するシリアライズとデシリアライズのメソッドが Parcel にないので、以下のようにする。

public class MyParcelable implements Parcelable {
    private boolean mHoge;
    public MyParcelable(Parcel source) {
        mHoge = ParcelUtils.readBoolean(source);
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        ParcelUtils.writeBoolean(dest, mHoge);
    }
}

Thread

メソッドの呼び出しがどのスレッドで実行されているかをチェックする。
ブロックするメソッドはメインスレッドで呼ばれてほしくないので、もしメインスレッドで呼んでいたら例外を投げたいし、UI を操作するメソッドはメインスレッドで呼ばれてほしいので、それ以外のスレッドで呼んでいたら例外を投げたい、という時に使う。

public <T> T blockingGet(String url, Map<String, String> params) {
    ThreadUtils.checkNotMainThread();

    // ...
}

DialogFragment

LoaderCallbacks のメソッド内での FragmentTransaction は許可されていないので、Handler 経由で表示や非表示の切り替えをする。

DialogFragmentUtils.dismissOnLoaderCallback(fragmentManager, "MY_DIALOG_TAG");
KeithYokoma
Android, Java, Perl, Scala, Play Framework, CoffeeScript, Smalltalk, JavaFX, Groovy, AWS, Docker
http://keithyokoma.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away