2011-01-11 36 views
35

Tôi hiện đang làm việc trên một ứng dụng Android sử dụng 'JSON' làm phản hồi từ máy chủ. Thông thường tôi làm việc trên phản hồi JSON. Nhưng bây giờ tôi có một vấn đề với logcat, nếu chuỗi phản hồi JSON rất dài, nhiều hơn x ký tự (tôi không biết chính xác chuỗi giá trị tối đa có thể được hiển thị bằng logcat), một số chuỗi JSON là còn thiếu.Hiển thị chuỗi khác trên Logcat

Mặc dù vẫn có thể cung cấp cho tôi đầu ra, tôi cần thông tin trên chuỗi JSON được truyền từ máy chủ.

Có khả năng hiển thị nhiều chuỗi hơn trên logcat không? Giống như tăng bộ đệm hoặc bất kỳ tham số nào mà tôi có thể sử dụng để tăng độ dài chuỗi tối đa có thể được hiển thị bằng logcat.

+0

Tại sao bạn không chia nhỏ json thành nhiều thư? – Mark

+0

Tôi gặp vấn đề tương tự chính xác –

Trả lời

1

nếu bạn không sử dụng nhật thực, hoặc bạn là nhưng @Nanne câu trả lời không làm việc cho bạn tôi chỉ có thể nghĩ rằng trong hai lựa chọn:

  1. nhất nhưng phức tạp hơn, tôi giả sử JSON của bạn được sáng tác bởi một số loại "iterables" (đối tượng JSON và/hoặc mảng), do đó, bạn có thể phân tích cú pháp và duyệt qua JSON và in từng phần tử trong LogCat riêng biệt
  2. Dễ dàng hơn nhưng cũng xấu hơn, chia chuỗi JSON thành chuỗi và in từng chuỗi con LogCat (bạn có thể tìm các cách khác nhau để tách một Chuỗi here)

chỉnh sửa: Một khả năng khác: viết JSON vào một tập tin trong thẻ SD như một khúc gỗ, và sau đó lấy các tập tin khi bạn muốn kiểm tra phản ứng

+0

Không thể cấu hình IDE (trong trường hợp của tôi là Android Studio) để không cắt bỏ các báo cáo nhật ký của tôi? Trong Xcode, tôi chưa từng gặp vấn đề này. –

0

tại sao không sử dụng logcat từ một dòng lệnh?

Tôi nghi ngờ liệu đó có phải là điều bạn đang mong đợi hay không, nhưng tại sao bạn không thử?

vấn đề lệnh

./adb -e logcat

từ thư mục trong đó có adb. điều này là dành cho trình giả lập. thay thế -e bằng -d cho một thiết bị

+8

Trong các thử nghiệm của tôi, có vẻ như dòng lệnh logcat cũng cắt đứt chuỗi mục nhập nhật ký tại một điểm nhất định. – ThomasW

-5

Nói chung nếu bạn muốn đưa đầu ra vào Logcat, bạn nên sử dụng lệnh "Đăng nhập".

Một ví dụ:

Log.d(TAG,"OUTPUT"): 

d = debug
TAG = một chuỗi bạn xác định, được hiển thị trong Logcat trong cột trước khi "bình thường" đầu ra
OUTPUT = thứ u muốn để in

Nhật ký là một lớp ghi nhật ký bạn có thể sử dụng để in ra các thông báo tới nhật ký. Bạn có thể đọc tin nhắn trong thời gian thực nếu bạn chạy logcat trên DDMS (được bảo hiểm tiếp theo). Các phương thức ghi chung bao gồm: v (String, String) (verbose), d (String, String) (debug), i (String, String) (thông tin), w (String, String) (warning) và e (String, String) (lỗi).

Để biết thêm thông tin:

http://developer.android.com/guide/developing/debug-tasks.html

EDIT:

gì tôi chữa trước là, để kiểm tra một số điều với kết quả đầu ra bạn không nên sử dụng:

System.out.println("JSON stuff"); 

Thay vì sử dụng quyền này bạn hãy sử dụng mã của bạn:

// Values just as example 
private static void string TAG = "+++JSON+++"; 
... 
Log.d(TAG,"JSON stuff in here"); 
... 

Nó sẽ được hiển thị trong Logcat. Tôi không biết chính xác tại sao, nhưng đó không phải là cách tốt hơn. Như thế này bạn cũng có thể hiển thị một thông báo lỗi:

Log.e(...); 

Nó sẽ thay đổi màu sắc của đầu ra của bạn trong Logcat, vì vậy bạn có thể thấy nó tốt hơn nếu ví dụ một lỗi xảy ra.

+8

Vấn đề là ông đang sử dụng logcat, nhưng có một giới hạn trên cho chiều dài của một chuỗi trong một mục nhập logcat. – ThomasW

69

Ugly nhưng nó không được công việc:

public static void longInfo(String str) { 
    if(str.length() > 4000) { 
     Log.i(TAG, str.substring(0, 4000)); 
     longInfo(str.substring(4000)); 
    } else 
     Log.i(TAG, str); 
} 
+1

Bạn có thể thực hiện nó lặp đi lặp lại thay vì đệ quy quá ... :: shrug :: – Travis

+3

@Travis Lặp lại là gì;)? – Karussell

+0

Tôi chỉ cần thêm thông số "Tag" vào 'Log.i()' và tôi đã thiết lập và chạy. –

8
if(xml.length() > 4000) { 
for(int i=0;i<xml.length();i+=4000){ 
    if(i+4000<xml.length()) 
     Log.i("rescounter"+i,xml.substring(i, i+4000)); 
    else 
     Log.i("rescounter"+i,xml.substring(i, xml.length())); 
} 
} else 
Log.i("resinfo",xml); 

Đây là cách tôi đã làm nó.

2

Một số API RESTful của chúng tôi trả về các phản hồi JSON rất dài. Đây là phương pháp định dạng chúng cho LogCat:

private static final int LOGCAT_MAX_LENGTH = 3950; 

... 

private void logLongJsonStringIfDebuggable(String s) { 
    if (BuildConfig.DEBUG) { 
     while (s.length() > LOGCAT_MAX_LENGTH) { 
      int substringIndex = s.lastIndexOf(",", LOGCAT_MAX_LENGTH); 
      if (substringIndex == -1) 
       substringIndex = LOGCAT_MAX_LENGTH; 
      Log.d(TAG, s.substring(0, substringIndex)); 
      s = s.substring(substringIndex).trim(); 
     } 
     Log.d(TAG, s); 
    } 
} 
Các vấn đề liên quan