2012-10-11 23 views
17

Tôi dường như đang gặp sự cố với 1 hoạt động trên Nexus Samsung trong ứng dụng và tôi không thể hiểu điều gì đang thực sự gây ra sự cố.Tôi không thể tìm ra vấn đề với lỗi stacktrace

java.lang.ArrayIndexOutOfBoundsException: length=244; index=1753 
at android.text.MeasuredText.addStyleRun(MeasuredText.java:168) 
at android.text.MeasuredText.addStyleRun(MeasuredText.java:204) 
at android.text.StaticLayout.generate(StaticLayout.java:281) 
at android.text.StaticLayout.<init>(StaticLayout.java:140) 
at android.text.StaticLayout.<init>(StaticLayout.java:80) 
at android.text.StaticLayout.<init>(StaticLayout.java:59) 
at android.widget.TextView.makeSingleLayout(TextView.java:5901) 
at android.widget.TextView.makeNewLayout(TextView.java:5741) 
at android.widget.TextView.onMeasure(TextView.java:6098) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1038) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:576) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
at android.view.View.measure(View.java:15172) 
at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1196) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at android.widget.ScrollView.onMeasure(ScrollView.java:318) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at android.view.View.measure(View.java:15172) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:833) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2148) 
at android.view.View.measure(View.java:15172) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1848) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1100) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1273) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
at android.view.Choreographer.doFrame(Choreographer.java:525) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4745) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 

Đây là hoạt động mà khách hàng của tôi đang nói với tôi đang gây ra sự cố. Đây là vấn đề duy nhất.

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 



public class Protocols03_04Activity extends Activity 
{ 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.protocols03_04); 



    } 
    //Options Menu 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     super.onCreateOptionsMenu(menu); 
     getMenuInflater().inflate(R.menu.optmenu, menu); 
     menu.findItem(R.id.medcom_optmenu_item).setIntent(new Intent(this, CallMedcom.class)); 
     menu.findItem(R.id.dispatch_optmenu_item).setIntent(new Intent(this, CallDispatch.class)); 
     menu.findItem(R.id.settings_optmenu_item).setIntent(new Intent(this, ProtocolsSettingsActivity.class)); 
     menu.findItem(R.id.mmenu_optmenu_item).setIntent(new Intent(this, ProtocolsMMenuActivity.class)); 
     menu.findItem(R.id.gps_optmenu_item).setIntent(new Intent(this, GPSActivity.class)); 
     menu.findItem(R.id.search_optmenu_item).setIntent(new Intent(this, SearchActivity.class)); 
     return true; 
    } 
} 

Tôi đã cố gắng tạo lại sự cố nhưng tôi không thể. Tôi đã thử trên 2 điện thoại Motorola khác nhau.

+0

Cảm ơn bạn về đêm ... Câu hỏi của bạn đã lưu tôi. Tôi cũng có cùng một vấn đề. – praveenb

Trả lời

16

Dường như là lỗi đã biết với TextView. Kiểm tra các sự cố tương tự herehere

Có đề cập đến thiên hà trong bài đăng. Vấn đề đầu tiên được đánh dấu để phát hành trong tương lai, vấn đề thứ hai dường như đã được sửa.

CẬP NHẬT

djmedic đã tìm thấy một workaround here

+0

Cảm ơn bạn. Các liên kết đó hữu ích. Tôi tìm thấy một cách giải quyết nhưng làm thế nào để thực hiện nó. Đó là tại https://gist.github.com/3424004. Nó là một hoạt động riêng biệt và tôi gọi nó? Nếu vậy bạn gọi nó như thế nào? Nếu nó là để đi vào hoạt động thực tế của tôi, tôi đã có lỗi. – djmedic

+1

Bạn nên kiểm tra mã đó bằng cách thay thế TextView trong bố cục của bạn bằng JellyBeanSpanFixTextView. Nó không phải là một Acitivity, đó là một TextView tùy chỉnh. Vì vậy, lưu JellyBeanSpanFixTextView ở đâu đó, như com.myproject.mycustomtextview. [Ở đây] (http://prasanta-paul.blogspot.com.au/2010/05/android-custom-textview.html) là một hướng dẫn mà tôi tìm thấy để sử dụng chế độ xem tùy chỉnh trong bố cục của bạn. Đặc biệt, hãy xem bước 3, nơi nó đang sử dụng tên đủ điều kiện để tham chiếu chế độ xem tùy chỉnh. – rlay3

+1

rlay3 Cảm ơn bạn vì câu trả lời của bạn. Nó đã cứu tôi. Cảm ơn rất nhiều vì đã giải thích cách sử dụng lớp học. – praveenb

0

Kinh nghiệm của tôi có thể giúp cho những người bạn thân, những người không muốn thêm TextView tùy chỉnh cho các dự án của họ.

Trước tiên, tôi có thể tạo lại lỗi này trong trình giả lập Android (4.1.2, API 16). Sau đó, tôi quyết định tìm ra nguyên nhân gây ra lỗi này. Rõ ràng - một số định dạng (trong đó làm cho "nhịp" được tạo). Hóa ra là trong trường hợp của tôi, nó đủ để thay thế ở hai nơi, ví dụ: này:

\"<b>@username</b>\"

với điều này:

\"@username\"

1

I Had Vấn đề tương tự. Nó không chỉ là một vấn đề trên Jellybean. Nó phải làm với một cái nhìn văn bản thêm thẻ span để html chuyển đổi văn bản thuần túy gây ra một ngoại lệ indexOutOfBounds. Có một giải pháp thay thế tại số link này.

Thay thế chế độ xem văn bản bằng chế độ xem văn bản tùy chỉnh này. Nếu vấn đề thẻ span bị treo, điều này sẽ bắt nó và thay vào đó hiển thị nội dung ở dạng văn bản thuần túy.

public class PatchedTextView extends TextView { 
public PatchedTextView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 
public PatchedTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 
public PatchedTextView(Context context) { 
    super(context); 
} 
@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    try{ 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    }catch (ArrayIndexOutOfBoundsException e){ 
     setText(getText().toString()); 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 
@Override 
public void setGravity(int gravity){ 
    try{ 
     super.setGravity(gravity); 
    }catch (ArrayIndexOutOfBoundsException e){ 
     setText(getText().toString()); 
     super.setGravity(gravity); 
    } 
} 
@Override 
public void setText(CharSequence text, BufferType type) { 
    try{ 
     super.setText(text, type); 
    }catch (ArrayIndexOutOfBoundsException e){ 
     setText(text.toString()); 
    } 
} 

}

+0

Tôi gặp sự cố với câu trả lời được bỏ phiếu nhiều nhất. Điều này làm việc tuyệt vời cho tôi =) –

3

Đã phải cùng một vấn đề sau khi cập nhật Android Studio (hoặc sdk ..). Tôi có thể sửa chữa nó bằng cách thiết lập inputType của EditText.

android:inputType="text" 
+0

Đó là giải pháp! đã làm cho tôi! –

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