2011-02-04 27 views
49

Ok Tôi nhìn thẳng qua một cái gì đó ở đây ..Tài Android chuyển sang cảnh báo TypedValue chuỗi

Mỗi lần tôi đang ở trong ứng dụng của tôi và tôi thay đổi hoạt động, báo cáo logcat loạt các cảnh báo:

02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002b} 
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002c} 
02-04 14:42:36.524: WARN/Resources(1832): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f08002d} 

Các ứng dụng khác không hiển thị cảnh báo như vậy. Đây có phải là điều nén trước khi phát hành/aapt không?

+0

Bạn có thể gửi một số mã cho thấy làm thế nào bạn đang chuyển sang hoạt động? –

Trả lời

55

Bạn đang sử dụng tài nguyên bool nơi chuỗi được mong đợi.

Bạn có thể tìm thấy trong đó tài nguyên đang được sử dụng không đúng cách bằng cách mở tập tin R.java tạo của bạn và tìm kiếm các ID nguồn từ tin nhắn logcat:

0x7f08002b 
0x7f08002c 
0x7f08002d 

Cả ba nên từ tập tin bool.xml của bạn ("t = 0x12" trong thông báo cảnh báo nghĩa là tài nguyên là TYPE_INT_BOOLEAN).

Sau đó, tìm nơi ID tài nguyên đang được sử dụng trong dự án của bạn (có thể là bố cục xml, nhưng có thể ở bất kỳ đâu) và đảm bảo loại khớp.

Đây là ví dụ về một TextView có thể tạo thông điệp tường trình đó. Nếu trong res của tôi/values ​​/ bool.xml tôi có:

<resources> 
    <bool name="foo_flag">false</bool> 
</resources> 

tôi không đúng có thể tham khảo nó từ aa file layout xml:

<TextView android:id="@+id/foo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@bool/foo_flag"></TextView> 

Khi tôi chạy ứng dụng đó, tôi sẽ nhận được thông điệp cảnh báo vì "văn bản" dự kiến ​​một tài nguyên chuỗi, không phải là một bool (ứng dụng của tôi xuất hiện như mong đợi mặc dù kể từ khi cờ được chuyển đổi thành chuỗi "false").

+5

Cảm ơn Mike! Hóa ra không phải là một tài nguyên bool, nhưng kiểm tra các ID tài nguyên là bump tôi cần thiết. Tôi đã có android: text = "@ id/foo" - một số nguyên @id trong trường văn bản TextView của tôi. – DJC

+2

Điều thú vị là môi trường của tôi (Eclipse với MOTODEV) mặc định các trường văn bản TextView có cùng nội dung với các trường id của chúng. Thật tuyệt khi thấy các id trong bố cục, nhưng kết quả trong các cảnh báo này khi chạy. Không nghi ngờ gì có một hình phạt về hiệu suất (trẻ vị thành niên?) Đối với những người cải đạo. – DJC

+0

cảm ơn Mike .. Đã giúp tôi .. – alchemist

3

Tôi đã phát hiện ra rằng cảnh báo này cũng được xuất ra khi chỉ định chuỗi số nhiều từ một tiện ích yêu cầu thông số.

Ví dụ:

<plurals name="song_count"> 
    <item quantity="one">%d song in playlist</item> 
    <item quantity="other">%d songs in playlist</item> 
</plurals> 

Các cảnh báo sẽ xuất hiện khi lạm phát là một hoạt động có chứa một widget tham khảo nó:

<TextView 
    android:id="@+id/tv_total_songs" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@plurals/song_count" /> 

Bạn không có nghi ngờ thay thế các chuỗi sau khi lạm phát quan điểm để thiết lập đúng thông số, ví dụ:

playlistSongCount.setText(
     getResources().getQuantityString(
      R.plurals.song_count, 
      songCount, 
      songCount)); 

Giải pháp rõ ràng ở đây là xóa thuộc tính android:text khỏi bố cục vì nó không có mục đích.

2

Kiểm tra để xem nếu bạn không có: -

<TextView android:text="@+id/labelText"/> 

trong tập tin tài nguyên của bạn.

0

Sự cố trong android:text="@+id/fooText

Hãy thử thay đổi.xml này:

<TextView 
    android:id="@+id/foo" 
    android:text="@+id/fooText"/> 

Để này:

<TextView 
    android:id="@+id/foo" 
    android:text=""/> 
60

Những cảnh báo chỉ xảy ra khi một lựa chọn phát triển nhất định được kích hoạt.

Device Cài đặt> Tùy chọn nhà phát triển> Disable 'Enable xem kiểm tra thuộc tính'

+0

Cảm ơn, điều này đã cho tôi :) –

+0

Không đủ thông tin. Kiểm tra thuộc tính nào? –

+0

@BrillPappin Tôi đã cập nhật câu trả lời – Tobrun

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