2016-04-24 7 views
0

アクティビティ内のTextViewにログメッセージを表示するための良い方法を見つけようとしています。テキストビューではtried to display logcat messagesですが、フラグメントを開いたり閉じたりするたびに結果が変わり、すべてのメッセージが表示されるわけではありません。私は複数のアクティビティとクラスにログインしているので、すべてのクラスに結合することなくログに記録する方法を見つけようとしています。私がアクセスして表示できるシステムロギングのいくつかのタイプ、またはlogcatの代替手段がありますか?または有用な図書館か何か?AndroidでUIにログインするにはどうすればよいですか?

おかげ

+0

ログを保存する場合は、ファイルに書き込むこともできます。あなたは間違いなくそれらを緩めません。 –

+0

あなたはこれをあなたのデバイス上で見ることができますhttp://android-arsenal.com/details/1/2649 –

答えて

0

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

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(); 
    } 
} 
0

トーストは小さなポップアップでの動作についての簡単なフィードバックを提供します:

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

enter image description here

+2

これはまれな出来事にのみ役に立ちます - それを超えると非常に迷惑になり、効果的に役に立たなくなります。 –

+0

ありがとうございますが、セッションに記録されているすべてのメッセージのリストを表示するのは面白いです。 – Brendan

1

それは、Android上のログに来るとき、私は間違いなくお勧めします: https://github.com/JakeWharton/timber

たとえば、Timと同じように迷惑なTAGを行う必要はありませんベールはこれをあなたのためにします。

あなたの質問に関して、私はあなたがそれを木材に自分の木を植えるためにできると思います。これにより、すべてのロギングがそこを通過することが確認されます。そこから、必要なものをすべて取得してログに記録できます。アプリケーションにツリーが植えられている場所の例を参照してください。https://github.com/JakeWharton/timber/blob/master/timber-sample/src/main/java/com/example/timber/ExampleApp.java これはアプリケーションレイヤーにあるので、何らかの方法でアクティビティにフェッチする必要があります。簡単な方法ではなく、あまり美しい方法ではなく、あなたができることは、ログをコレクションに格納し、静的にアクセス可能にしてアプリケーションから取得できるようにすることだと思います。

私はなぜこれが欲しいのか不思議ですが、なぜAndroid Studioのロギングツールで十分ではないのですか? :)

+0

ありがとうございます。私はそれを確認します。 Android Studioのロギングツールはうまくいきますが、コンピュータなしでアプリを実行しているときにデバイスのログを表示できるようにしたいと考えています。ネットワークテストアプリなので、特定のことがバックグラウンドで発生したときにメッセージを記録し、そのメッセージのリストを表示できるようにしたいと考えています。 – Brendan

+1

ちょっとブレンダン、確かに意味がある。私は木材があなたのニーズに合っていると思う。あなたがどこからでもフェッチできるシングルトンを作成する独自の「カスタマイズされた」ロガーを作成し、必要なものをログする別のオプションがない場合は、その値をCollectionに格納してそこから取得します。 –

関連する問題