簡體   English   中英

致命異常:使用畢加索的IndexOutOfBoundsException(僅在某些設備中發生)

[英]Fatal Exception: IndexOutOfBoundsException using Picasso (only happen in some device)

最近,我注意到這起致命的崩潰發生在我的Android應用程序上。

致命異常:java.lang.IndexOutOfBoundsException索引:1,大小:0

當用戶單擊進入項目頁面,並且無法從我的橫幅數組加載索引1並將圖像設置為可繪制時,就會發生此問題。

我使用幾種不同品牌的android設備測試了該應用程序,但它們都可以正常運行而不會崩潰。 最重要的是,我能夠從數組中加載圖像並設置圖像。

日志如下:

  1. ava.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
  2. java.util.ArrayList.get(ArrayList.java:308)
  3. com.midasmind.app.mmgocarmm.DetailActivity.onCreate(DetailActivity.java:222)
  4. android.app.Activity.performCreate(Activity.java:6303)
  5. com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)

但是,那真是太奇怪了,只有大約5%的用戶遇到此問題。 (每天約有100-200個活躍用戶)。 我的一位朋友在加載到項目頁面時發生了一次崩潰。 但是他只崩潰了一次,並且是普通用戶,每天都在使用該應用進行幾次會話。

這是我的商品頁面上的代碼:

(DetailActivity.java:222 = Picasso.with(this).load(sidebannerAry.get(sidebanner1index).get(“ image”))。into(sidebanner1Btn);)

public class DetailActivity extends Activity{
    public static ArrayList<HashMap<String,String>> sidebannerAry = new ArrayList<HashMap<String,String>>();
    int sidebanner1index = 1;
}

protected void onCreate(Bundle savedInstanceState) {
    sidebanner1Btn = (ImageView) findViewById(R.id.sidebanner1btn);

    sidebanner1Btn.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent b = new Intent(Intent.ACTION_VIEW, Uri.parse(sidebannerAry.get(sidebanner1index).get("url")));
            startActivity(b);

        }
    });
    Picasso.with(this).load(sidebannerAry.get(sidebanner1index).get("image")).into(sidebanner1Btn);
}

這是我在應用程序啟動屏幕期間用於從數據庫檢索數據的代碼:

                JSONArray sidebannerAry = result.getJSONArray("sidebannerData");
                for (int i = 0; i < sidebannerAry.length(); i++){
                    JSONObject temp = sidebannerAry.getJSONObject(i);
                    HashMap<String, String> map = new HashMap<String, String>();

                    String image = DefensiveClass.optString(temp, "bannerImage");
                    String url = DefensiveClass.optString(temp, "bannerURL");

                    map.put("image", image);
                    map.put("url", url);

                    DetailActivity.sidebannerAry.add(map);
                }

誰能幫我看看我做錯了什么嗎? 非常感謝。

錯誤發生在以下行:

(DetailActivity.java:222 = Picasso.with(this).load(sidebannerAry.get(sidebanner1index).get(“ image”))。into(sidebanner1Btn);)

在上一行中,可能發生IndexOutOfBoundsException的唯一部分是:-

sidebannerAry.get(sidebanner1index)

您已將sidebanner1index的值設置為“ 1”。 因此,當sidebannerAry元素少於2個時,您會遇到錯誤。 這就是為什么只有一定比例的用戶會收到此錯誤的原因。

當您嘗試訪問大於數據結構長度的索引時,發生索引超出范圍錯誤。

解決這個問題最簡單的方法是畢加索行檢查閹了前放一個標志sidebannerAry的長度比更高sidebannerIndex

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM