2010-11-22 41 views
13

Có thể hiển thị thông báo tường trình (mà tôi in bằng cách sử dụng android.util.Log) trên màn hình trong ứng dụng Android không?Hiển thị thông báo tường trình trên màn hình cho ứng dụng Android

Có phương pháp nào khác tốt hơn để chỉ xuất các dòng trên màn hình không?

Thứ gì đó như System.out.println?

+9

Thật tuyệt vời khi mọi người không đọc câu hỏi. Rõ ràng OP muốn in các dòng văn bản trên màn hình và tất cả các câu trả lời đều chỉ vào các giải pháp ghi nhật ký. – Kyberias

Trả lời

4

Giống như những người khác đã đề xuất, bạn có thể sử dụng mèo đăng nhập. Nếu bạn đang sử dụng trình mô phỏng hoặc gỡ lỗi thiết bị, bạn có thể sử dụng adb logcat để xem tin nhắn. Trong phối cảnh gỡ lỗi Eclipse, có một cửa sổ sẽ làm điều đó cho bạn.

Một cách khác, không kèm theo trình gỡ lỗi, là sử dụng ứng dụng CatLog - Logcat Reader.

+0

trình đọc logcat hoạt động tuyệt vời! – n1kh1lp

+0

Nó rất hữu ích, nhưng nếu bạn cần các bản ghi có trong ứng dụng của bạn, câu trả lời của 100rabh dưới đây là những gì được yêu cầu. (một phương pháp để đọc android.util.Log và hiển thị nó trong một ứng dụng) – garlicman

+1

Ngoài ra, CatLog bây giờ cần Root. Nếu bạn không có sẵn root, cách duy nhất tôi đã tìm thấy cho đến nay là gọi "logcat" từ ứng dụng của bạn như là một lệnh shell không phải root. (xem câu trả lời của liên kết 100rabh được cung cấp) – garlicman

2

Chỉnh sửa

tôi nghĩ rằng chúng tôi có một vài khung có sẵn trên Android. Hãy kiểm tra những liên kết này và xem nếu nó làm việc cho bạn

http://developer.android.com/reference/java/util/logging/Logger.html

http://developer.android.com/reference/java/util/logging/LogManager.html

Bạn cũng có thể kiểm tra dự án này ra ...

http://code.google.com/p/microlog4android/

+0

cảm ơn. Tôi chỉ chỉnh sửa cho câu hỏi. Có cách nào đơn giản hơn để giữ các đường in trên màn hình không? – n1kh1lp

+0

Một khi bạn nhận được các bản ghi từ hệ thống hiển thị chúng không phải là một vấn đề. Tôi giả sử bạn đang gặp vấn đề về phần đầu tiên ... Kiểm tra bài viết cập nhật của tôi – DeRagan

2

Có zero4

những gì bạn đang cố gắng làm là thả 'logcat' comand trên android shell & nhận đầu ra lệnh dưới dạng luồng đầu ra.Điều này link sẽ giúp bạn.

1

Tôi sử dụng "android.widget.Toast.makeText (ngữ cảnh ngữ cảnh, văn bản CharSequence, thời lượng int)" để làm điều gì đó giống như những gì bạn đang yêu cầu. Có vẻ như cách dễ nhất để nhận được một số tin nhắn nhanh trên màn hình và làm cho nó biến mất tự động (dựa trên tham số cuối cùng).

:-)

+0

Thật sao? Bánh mì nướng là cho một tin nhắn, không phải là một dòng đầu ra đăng nhập như android.util.Log sẽ mất. Thử Toast'ing với LENGTH_SHORT 50 lần trong 10 giây. Bạn sẽ được xem Toasts một sau khi khác trong 5 phút. Ngoài ra, bạn đang đọc từ android.util.Log như thế nào? – garlicman

+0

Hãy tham khảo câu hỏi trước khi bạn quyết định bỏ phiếu xuống. Anh ta muốn có cách in thông điệp tường trình vào màn hình. Lưu ý câu hỏi không phải là cách đọc từ nhật ký và ghi lên màn hình, nhưng kiểm soát nó tại thời điểm mã của anh ấy làm bản thân nhật ký. Tôi không gợi ý viết TẤT CẢ các bản ghi của anh ấy bằng bánh mì nướng (mà rõ ràng không phải là một ý tưởng tốt), nhưng nếu anh ấy muốn xem MỘT SỐ thông điệp chính trên màn hình (đó là yêu cầu chính trong câu hỏi của anh ấy), tôi vẫn đứng cạnh "người thay thế" của tôi Đề nghị bánh mì nướng (ngoài logcat), trừ khi tôi thấy giải pháp "tốt hơn và chung chung" của bạn không phải là logcat. –

+0

Tôi đã làm. "Anh ấy muốn một cách để in thông điệp tường trình vào màn hình." Không, anh ta muốn có cách để in tin nhắn android.util.Log lên màn hình. Nếu bạn cần tự làm điều này (tôi làm như vậy, đó là lý do tại sao tôi tình cờ gặp câu hỏi SO này), bạn sẽ không đề xuất Bánh mì nướng, điều này không giúp đọc từ Đăng nhập từ một ứng dụng, cũng không phải là phương pháp hiển thị loại thư được ghi vào android.util.Log. Nhật ký không chỉ là một cách để gỡ lỗi nơi Toast là một công cụ gỡ lỗi thay thế. Bạn không thể nướng bánh mì từ bất cứ nơi nào trong một ứng dụng, nhưng bạn có thể đăng nhập. A -1 cũng mất điểm cho tôi. Câu trả lời này không giúp được gì. – garlicman

0

Vâng, đó là một giải pháp để đăng nhập bất cứ điều gì bạn muốn trên màn hình sử dụng this lib. Nó không làm việc cho tôi, vì vậy tôi phát triển giải pháp của riêng mình, bạn có thể tìm thấy một ví dụ về nó here. Nó thực sự đơn giản, chỉ cần thêm một OnScreenLog lớp để dự án của bạn

package br.com.ideiageni.onscreenlogSample; 

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Handler; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 


/** 
* Created by ariel on 07/07/2016. 
*/ 
    public class OnScreenLog { 
    private static int timeoutTime = 1000; 
    private static TextView tvLog; 
    private static int logCount = 0; 
    private static int logCountMax = 30; 
    private static String[] logs = new String[logCountMax]; 
    private static int cntClicks = 0; 
    private static boolean visibility = false; 
    private static Activity activity; 
    private int maxClicks = 5; 

    public OnScreenLog(){} 

    public OnScreenLog(Activity activity, int ViewID){ 
     OnScreenLog.activity = activity; 
     tvLog = new TextView(activity.getApplicationContext()); 
     maintainLog("Log is working"); 
     tvLog.setLayoutParams(new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT)); 
     tvLog.setTextColor(Color.BLACK); 
     tvLog.setBackgroundColor(Color.LTGRAY); 
     tvLog.setAlpha((float) 0.4); 

     View v = null; 
     LinearLayout linearLayout; 
     RelativeLayout relativeLayout; 
     try { 
      linearLayout = (LinearLayout) activity.findViewById(ViewID); 
     } catch (ClassCastException e) {linearLayout = null;}; 

     try { 
      relativeLayout = (RelativeLayout) activity.findViewById(ViewID); 
     } catch (ClassCastException e) {relativeLayout = null;}; 
     if(linearLayout != null) { 
      linearLayout.addView(tvLog); 
      v = linearLayout; 
     } else if(relativeLayout != null) { 
      relativeLayout.addView(tvLog); 
      v = relativeLayout; 
     } 

     if(v != null) { 
      v.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        switch (event.getAction()) { 
         case MotionEvent.ACTION_DOWN: 
          cntClicks++; 
          timerHandler.removeCallbacks(rTimeout); 
          timerHandler.postDelayed(rTimeout, timeoutTime); 

          if (cntClicks > maxClicks-1) { 
           setLogVisible(!visibility); 
           timerHandler.removeCallbacks(rTimeout); 
           cntClicks = 0; 
          } 
          break; 

        } 
        return false; 
       } 
      }); 
     } 

    } 

    public void log (String text){ 
     String logText = text; 
     maintainLog(logText); 
    } 

    public void log (int text){ 
     String logText = String.valueOf(text); 
     maintainLog(logText); 
    } 

    public void log (int[] text){ 
     StringBuilder builder = new StringBuilder(); 
     for (int i : text) { 
      builder.append(i); 
      builder.append("-"); 
     } 
     String logText = builder.toString(); 
     maintainLog(logText); 
    } 

    public void log (byte[] text){ 
     StringBuilder builder = new StringBuilder(); 
     for (int i : text) { 
      builder.append(i); 
      builder.append("-"); 
     } 
     String logText = builder.toString(); 
     maintainLog(logText); 
    } 

    private void maintainLog(String newText){ 
     String logText = ""; 
     if(logCount<logCountMax) logCount++; 
     for(int i=logCount-1; i>0; i--){ 
      logs[i] = logs[i-1]; 
     } 
     logs[0] = newText; 
     for(int i=0; i<logCount; i++){ 
      if(i<logCount-1) logText+=logs[i]+System.getProperty("line.separator"); 
      else logText+=logs[i]; 
     } 
     tvLog.setText(logText); 
    } 

    public void clearLog(){ 
     tvLog.setText(""); 
    } 

    public void setLogVisible(boolean visibility){ 
     if(visibility) tvLog.setVisibility(View.VISIBLE); 
     else tvLog.setVisibility(View.INVISIBLE); 
     OnScreenLog.visibility = visibility; 
    } 

    public static int getLogCountMax() { 
     return logCountMax; 
    } 

    public static void setLogCountMax(int logCountMax) { 
     OnScreenLog.logCountMax = logCountMax; 
     logs = new String[logCountMax]; 
    } 

    public int getMaxClicks() { 
     return maxClicks; 
    } 

    public void setMaxClicks(int maxClicks) { 
     this.maxClicks = maxClicks; 
    } 

    Handler timerHandler = new Handler(); 
    Runnable rTimeout = new Runnable() { 

     @Override 
     public void run() { 
      cntClicks = 0; 
     } 
    }; 
} 

sau đó, ví dụ:

public class Activity1 extends AppCompatActivity { 

private OnScreenLog log; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_1); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    log = new OnScreenLog(this, R.id.content_1); 
    log.log("Started log on Activity 1"); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getApplicationContext(), Activity2.class); 
      startActivity(intent); 
      log.log("Starting Activity 2"); 
      Snackbar.make(view, "Starting Activity 2", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
} 

đâu R.id.content_1 là tên của LinearLayout chính hoặc RelativeLayout hoạt động của bạn.

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/content_1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="br.com.ideiageni.onscreenlogSample.Activity1" 
tools:showIn="@layout/activity_1"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Activity 1!" /> 

</RelativeLayout> 

Cả hai giải pháp đều không in các thông điệp tường trình hiện tại, vì vậy bạn cần phải ghi lại thông tin đăng nhập hiện tại trên nhật ký hiện tại của mình.

Công việc chưa hoàn thành nhưng có thể được sử dụng cho bất kỳ ai có nhu cầu. Thiếu một số hướng dẫn về cách sử dụng. Đề xuất được hoan nghênh.

Các vấn đề liên quan