0

アクティビティの TextView にログ メッセージを表示する良い方法を見つけようとしています。TextViewにlogcat メッセージを表示しようとしましたが、Fragment を開いたり閉じたりするたびに結果が異なり、すべてのメッセージが表示されるわけではありません。複数のアクティビティとクラスにログインしているので、すべてのクラスに結合せずにログインする方法を見つけようとしています。アクセスして表示できるシステムログのいくつかのタイプのlogcatまたは何かに代わるものはありますか? または、便利なライブラリなどはありますか?

ありがとう

4

3 に答える 3

2

Android でのログインに関しては、 https ://github.com/JakeWharton/timber をお勧めします。

たとえば、煩わしい TAG を常に行う必要はありません。Timber がこれを行ってくれます。

あなたの質問に関しては、ティンバーに自分の木を植えるために何ができると思いますか. これにより、すべてのログがそこを通過することが保証され、そこから必要なものすべてをキャッチしてログに記録できます。アプリケーションでツリーが植えられている場所の彼の例を参照してください : https://github.com/JakeWharton/timber/blob/master/timber-sample/src/main/java/com/example/timber/ExampleApp.javaアプリケーション層にあるため、何らかの方法でそれらをアクティビティにフェッチする必要があります。あまり美しい方法ではありませんが、ログをコレクションに保存し、これをアプリケーションから静的にアクセスできるようにすることができると思います。

余談ですが、なぜこれが必要なのか知りたいのですが、Android Studio のロギング ツールが十分でないのはなぜですか? :)

于 2016-04-24T20:06:25.690 に答える
1

履歴をメンバー変数に保存し、ダイアログを開くたびに新しいログ行のみを追加することになりました。

public class LogsDialogFragment extends DialogFragment {

    private StringBuilder log = new StringBuilder();

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Sets the Layout for the UI
        LayoutInflater i = getActivity().getLayoutInflater();
        View rootView = i.inflate(R.layout.fragment_logs_dialog, null);

        TextView logTextView = (TextView) rootView.findViewById(R.id.logTextView);
        logTextView.setMovementMethod(new ScrollingMovementMethod());

        try {
            Process process = Runtime.getRuntime().exec("logcat -d");
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(process.getInputStream()));

            StringBuilder log = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                if (line.contains(WifiDirectHandler.LOG_TAG)){
                    // Removes log tag and PID from the log line
                    log.append(line.substring(line.indexOf(": ") + 2)).append("\n");
                }
            }

            this.log.append(log.toString().replace(this.log.toString(), ""));
            logTextView.setText(this.log.toString());
        } catch (IOException e) {
            Log.e("wifiDirectHandler", "Failure reading logcat");
        }

        // Creates and returns the AlertDialog for the logs
        AlertDialog.Builder dialogBuilder =  new  AlertDialog.Builder(getActivity())
            .setTitle(getString(R.string.title_logs))
            .setNegativeButton(getString(R.string.action_close),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        dialog.dismiss();
                    }
                }
            ).setView(rootView);
        return dialogBuilder.create();
    }
}
于 2016-04-29T01:43:20.577 に答える
0

トーストは、操作に関する簡単なフィードバックを小さなポップアップで提供します。

Toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();

ここに画像の説明を入力

于 2016-04-24T20:01:52.053 に答える