logをTextViewに表示したいが、logは他のクラスも呼び出しているのでちゃんと動くかが気になった。
この LogAppender クラスは、ログ出力のラッパーとして動作し、ログを Android の Log.d() に出力するとともに、指定された TextView にもログを表示するユーティリティクラスです。
Handler を使って UI スレッドで TextView.append() を安全に実行している点がポイントです。
MainActivity での使い方 1. MainActivity.java の例
package io.github.kyukyunyorituryo.aozoraepub3; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import io.github.kyukyunyorituryo.aozoraepub3.util.LogAppender; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ログを表示するTextViewを取得 TextView logTextView = findViewById(R.id.textViewLog); // LogAppenderにTextViewをセット LogAppender.setTextView(logTextView); // ログの出力テスト LogAppender.println("アプリ起動"); LogAppender.info(42, "情報ログ", "詳細情報"); LogAppender.warn(100, "警告ログ"); LogAppender.error(200, "エラーログ", "エラー詳細"); } }
- activity_main.xml のレイアウト例
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/textViewLog" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="8dp" android:textSize="16sp" android:text="ログ出力エリア\n" android:background="#EEEEEE"/> </LinearLayout>
- LogAppender の使い方のポイント LogAppender.setTextView(logTextView);
LogAppender に TextView をセットし、ログを UI に表示できるようにする。 LogAppender.println("アプリ起動");
append() メソッドを呼び出し、ログを TextView に追加する。 LogAppender.info(42, "情報ログ", "詳細情報");
"[INFO] 情報ログ (43) : 詳細情報" のように表示される。 LogAppender.warn(100, "警告ログ");
"[WARN] 警告ログ (101)" のように表示される。 LogAppender.error(200, "エラーログ", "エラー詳細");
"[ERROR] エラーログ (201) : エラー詳細" のように表示される。 4. Handler を使う理由 TextView.append(log); は UI の更新なので、メインスレッド (Looper.getMainLooper()) で実行する必要があります。 そのため、handler.post(() -> { textView.append(log); }) を使い、UIスレッドで処理を実行しています。
- まとめ LogAppender は、ログを Android の Log.d() と TextView の両方に出力できるクラス。 MainActivity で TextView を setTextView() で設定することで、UIにログを表示できる。 バックグラウンドスレッドからでも安全に UI を更新できるよう、Handler を利用している。