1

これはSamsungGalaxyS II(GT-I9100G)とSamsung NTT DOCOMO Galaxy S II LTE(SC-03D)で見られます。

私はレベル14に対して構築しており、レベル10(最小レベル3)をターゲットにしています。

テーマと関係があると思いますが、どこから始めればいいのかわかりません。すべてのGalaxySIIで発生しているわけではないと確信しています。そうでない場合は、さらに多くのレポートを取得することになります。

または、このコードが呼び出されるまでにアクティビティが破棄されている可能性があります-それが原因でしょうか?

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.app_icon);
builder.setTitle("my title");
builder.setMessage("my message which has about 7 lines and each line is short");
builder.setPositiveButton(R.string.ok, null);
builder.show();

ログ猫:

java.lang.ArrayIndexOutOfBoundsException: null
 at android.content.res.TypedArray.getInt(TypedArray.java:248)
 at android.widget.ScrollView.<init>(ScrollView.java:173)
 at android.widget.ScrollView.<init>(ScrollView.java:161)
 at java.lang.reflect.Constructor.constructNative(Constructor.java:-2)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
 at android.view.LayoutInflater.createView(LayoutInflater.java:505)
 at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
 at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
 at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
 at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
 at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:215)
 at com.android.internal.app.AlertController.installContent(AlertController.java:215)
 at android.app.AlertDialog.onCreate(AlertDialog.java:251)
 at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
 at android.app.Dialog.show(Dialog.java:225)
 at android.app.AlertDialog$Builder.show(AlertDialog.java:823)
4

3 に答える 3

1

コンストラクター時に、フレームワークは TypedArray を使用して、ビューの膨張に使用される xml レイアウトから xml データを取得します。標準のアンドロイドは、ScrollView のコンストラクター時に int を取得しないため、フレームワークのその部分を変更したように見えます。(とにかくtry/cacth/finallyブロックにあるはずなので、そこではうまくいきませんでした)。表示される ScrollView は、これらのデバイスのデフォルトのダイアログ実装に存在するものです (通常、ダイアログのすべてのコンテンツは、特に横向きモードで画面に収まらない場合に備えて、スクロールビュー内にある必要があります)。独自のビューを拡張して、dialogbuilder の setView で設定することができます。

View content = View.inflate(context, R.layout.my_view_content,null);
            TextView message = (TextView)content.findViewById(R.id.my_message);
            message.setText("my message which has about 7 lines and each line is short");
            new AlertDialog.Builder(context)
            .setTitle("my title")
            .setView(content)
            .show();
于 2012-03-18T03:16:25.337 に答える
1

例外の原因となるコードは次のとおりです。

TypedArray.getInt (TypedArray.java:248)

/**
 * Retrieve the integer value for the attribute at <var>index</var>.
 * 
 * @param index Index of attribute to retrieve.
 * @param defValue Value to return if the attribute is not defined.
 * 
 * @return Attribute int value, or defValue if not defined.
 */
public int getInt(int index, int defValue) {
    index *= AssetManager.STYLE_NUM_ENTRIES;
    final int[] data = mData;
    final int type = data[index+AssetManager.STYLE_TYPE];
    if (type == TypedValue.TYPE_NULL) {
        return defValue;
    } else if (type >= TypedValue.TYPE_FIRST_INT
        && type <= TypedValue.TYPE_LAST_INT) {
        // vvvvvvvvvvvvvvvvvvvvvv 248
        return data[index+AssetManager.STYLE_DATA];
        // ^^^^^^^^^^^^^^^^^^^^^^ 248
    }

    TypedValue v = mValue;
    if (getValueAt(index, v)) {
        Log.w(Resources.TAG, "Converting to int: " + v);
        return XmlUtils.convertValueToInt(
            v.coerceToString(), defValue);
    }
    Log.w(Resources.TAG, "getInt of bad type: 0x"
          + Integer.toHexString(type));
    return defValue;
}

奇妙なことに、そこにはありませんgetInt()(ScrollView.javaなぜそのダイアログに ScrollView さえあるのでしょうか?)。また、例外は異常に見えます。あなたは通常、取得しますが、取得Caused by: java.lang.ArrayIndexOutOfBoundsException: length=5; index=12345しませんnull

何が悪いのか本当の手がかりはありません。getIntしかし、ビュー属性を照会するために通常はそのように使用されるため、実際にはいくつかのカスタムレイアウトが原因である可能性があります

case R.styleable.View_scrollbars:
    final int scrollbars = a.getInt(attr, SCROLLBARS_NONE);
    if (scrollbars != SCROLLBARS_NONE) {
        viewFlagValues |= scrollbars;

これを引き起こしているのは、Samsung が行ったカスタム ファームウェアまたはソフトウェアの変更だと思います。

于 2012-03-18T02:09:59.073 に答える
0

ArrayIndexOutOfBoundsException配列/リストのサイズ/長さの範囲内にない配列/リスト内のインデックスに反復またはアクセスしようとするとスローされます。

あなたの場合、配列を扱う他のコードかもしれません。配列を扱うコード(例外がスローされる行を確認)が存在する場合は、投稿してください。

もう1つ、setPositiveButton()2番目の引数を変更しnew DialogInterface.onClickListener(){}ないと使用できなくなります:)

于 2012-03-18T01:47:18.243 に答える