この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、記事の最後で紹介します)
DTO(データの受け渡し用)クラスのArrayListをソートする
ポイント
DTO(Data Transfer Object)とはアプリケーション間でデータを受け渡すためのオブジェクトです。
主にHTTPベースでデータを受け渡す際のJSONデータを展開・格納するクラスとして使用します。
今回は、ArrayListで複数管理する場合でクラスのメンバ変数でソートする方法を紹介します。
アプリからGoProの動画リストを取得する場合、JSONデータでレスポンスを受け取ります。
受信したJSONデータを使って、動画のファイル名や登録日時で一覧表示するケースで説明します。
Open GoPro HTTP API (2.0)
DTOクラス
Get Media Listコマンドのレスポンス(JSONデータ)を格納するDTOクラスを用意します。
public class Media {
public String id;
public List<media> media;
public static class media {
public String d;
public List<fs> fs;
}
public static class fs {
public String n; // Media filename
public String cre; // Creation time in seconds since epoch
public String mod; // Time file was last modified in seconds since epoch
public String glrv; // Low resolution video size
public String ls; // Low resolution file size
public String s; // Size of media in bytes
}
}階層構造をもつクラスでMediaクラスはディレクトリ(d)とファイル(fs)を管理します。
fsクラスはファイル名(n)、サイズ(s)、登録日時(cre)などを管理します。
JSONデータの展開と格納
JSONデータのDTOクラス(Media)への展開はObjectMapperを使用します。
public final ObjectMapper mapper = new ObjectMapper();
public Media[] media;
:
public void files(String tz, int slot, int start) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(() -> {
MediaType type = MediaType.get("application/json; charset=utf-8");
RequestBody body = RequestBody.create("", type);
Request request = new Request.Builder()
.url("http://10.5.5.9/gp/gpMediaList")
.post(body)
.build();
try (Response res = client.newCall(request).execute()) {
if (!res.isSuccessful()) {
throw new IOException("Unexpected code " + res);
}
media[slot] = mapper.readValue(response[slot], Media.class);
} catch (IOException e) {
media[slot] = null;
}
:
});
}DTOクラスのArrayListをソートする
ArrayListのソート同様にComparatorを使用します。
昇順と降順の切り替えはオーバライドするcompareの引数を入れ替えます。
ファイル名の降順でソート
ファイル名の降順でソートするクラス(FileComparator)を作成します。
ファイル名の降順でソートするのでcompareはfs2.nとfs1.nを比較した結果を返却します。
ArrayListを作成したFileComparatorを指定してソートします。
public static class FileComparator implements Comparator<Media.fs> {
@Override
public int compare(Media.fs fs1, Media.fs fs2) {
return fs2.n.compareTo(fs1.n);
}
}
:
List<Media.fs> files = new ArrayList<>();
for (Media.media medias : media[slot].media) {
for (Media.fs file : medias.fs) {
files.add(file);
}
}
files.sort(new FileComparator());
:登録日時の降順でソート
登録日時の降順でソートするクラス(FileComparator)を作成します。
登録日時の降順でソートするのでcompareはfs2.creとfs1.creを比較した結果を返却します。
ArrayListを作成したFileComparatorを指定してソートします。
public static class FileComparator implements Comparator<Media.fs> {
@Override
public int compare(Media.fs fs1, Media.fs fs2) {
return Math.toIntExact(Long.parseLong(fs2.cre) - Long.parseLong(fs1.cre));
}
}
:
List<Media.fs> files = new ArrayList<>();
for (Media.media medias : media[slot].media) {
for (Media.fs file : medias.fs) {
files.add(file);
}
}
files.sort(new FileComparator());
:今回は、ここまでです。
DTOクラスのArrayListをソートしているAndroidアプリです。
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪
これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、JavaやC#などのオブジェクト指向言語が初めての方は、Androidのアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。
未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪


コメント欄