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 を利用している。