2012-10-11 7 views
17

アプリ内のSamsung Nexusで1つのアクティビティに関する問題が発生していますが、実際に問題の原因を理解できません。スタックトレースエラーで問題を把握できません

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) 

これは私の顧客が私に伝えているアクティビティで問題を引き起こしています。これが唯一の問題です。

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; 
    } 
} 

私は問題を再現しようとしましたが、できません。私は2種類のモトローラの携帯電話を試しました。

+0

ありがとう、あなたの質問は私を救った。私は同じ種類の問題を抱えています。 – praveenb

答えて

16

TextViewで既知のバグと思われます。類似の問題を確認するherehere

投稿に銀河の言及があります。最初の問題は将来のリリースでマークされ、2番目の問題は修正されたようです。

UPDATED

djmedicは、回避策here

+0

ありがとうございます。これらのリンクは役に立ちました。私は回避策を見つけましたが、どのように実装するのですか。それはhttps://gist.github.com/3424004です。それは別のアクティビティですか、私はそれを呼び出しますか?もしそうなら、どうやってそれを呼びますか?それが私の実際の活動に入るならば、私には誤りがありました。 – djmedic

+1

レイアウト内のTextViewをJellyBeanSpanFixTextViewに置き換えて、そのコードをテストする必要があります。これは活動ではなく、カスタムTextViewです。したがって、com.myproject.mycustomtextviewのようにJellyBeanSpanFixTextViewをどこかに保存してください。 [Here](http://prasanta-paul.blogspot.com.au/2010/05/android-custom-textview.html)は、レイアウトでカスタムビューを使用するためのチュートリアルです。特に、完全修飾名を使用してカスタム表示を参照しているステップ3を参照してください。 – rlay3

+1

rlay3ご回答いただきありがとうございます。それは私を救った。クラスの使い方を説明してくれてありがとう。 – praveenb

0

私の経験では、自分のプロジェクトにカスタムのTextViewを追加したくないものを仲間に役立つことを発見しました。

まず、Androidエミュレータ(4.1.2、API 16)でこのエラーを再現できました。 この後、このエラーの原因を突き止めることにしました。明らかに - 何らかの書式設定( は "スパン"を作成する)。私の場合、2つの場所で交換するだけで十分であることが分かった。この:これで

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

\"@username\"

1

私は同じ問題を抱えていました。それはjellyBeanの問題だけではありません。それは、変換されたプレーンテキストにhtml変換されたspanタグを追加して、indexOutOfBounds例外を発生させるテキストビューと関係しています。このlinkには回避策があります。

テキストビューをこのカスタムtextViewに置き換えます。スパンタグの発行が発生すると、これがキャッチされ、コンテンツがプレーンテキストで表示されます。

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

私は最も投票された答えに問題がありました。これは私のためにはうまくいった=) –

3

は、Android Studioのアップデート後に同じ問題がありました(またはSDKを...)。私はEditTextのinputTypeを設定することでそれを修正することができます。

android:inputType="text" 
+0

それは解決策です!私のために働いた! –

関連する問題