RecyclerView在"某些"上是空的。设备,但在我自己的设备上完美运行

时间:2017-08-08 10:51:28

标签: java android arraylist

我有一个使用json数据填充Recyclerview的应用程序。它在我自己的设备上完美运行。但是,它并不适用于某些甚至与我的Android版本相同的设备。

我通过在数据处理的某些阶段打印ArrayList的大小来找到问题的根源,我确信没有任何东西是由于网络。

确切的问题是ArrayList.size()在某些设备上返回0,但它不会发生在我自己的设备上,显示" 231"为了大小。

列表在类中定义并在void中初始化。

List<Match> liste;
 private void refreshList() {

    String ret = new TinyDB(getApplicationContext()).getString("list");




    try {
       JSONArray bulten = new JSONArray(ret.substring(ret.indexOf("[")));
        if(ret==""){Toast.makeText(getApplicationContext(),"Something is wrong.",Toast.LENGTH_LONG).show();}
        liste = new ArrayList<>();
        for (int i = 0; i < bulten.length(); i++) {
            String isim,kod,ust,alt,bet;
            bet = bulten.optJSONObject(i).getString("BetTypeId");
            isim = bulten.optJSONObject(i).getString("BetName");
            kod = bulten.optJSONObject(i).getString("Code");
            if(bulten.optJSONObject(i).optJSONArray("Odds25").optJSONObject(0) != null){
            ust = bulten.optJSONObject(i).optJSONArray("Odds25").optJSONObject(0).getString("Value");
            alt = bulten.optJSONObject(i).optJSONArray("Odds25").optJSONObject(1).getString("Value");}
            else{
                ust = "0.00";
                alt= "0.00";

            }
            if(bet == "3"){
            liste.add(new Match(isim,kod,ust,alt));}
        }
        Toast.makeText(getApplicationContext(),""+liste.size(),Toast.LENGTH_SHORT)
.show(); // The part I show the size of the arraylist is here.

        Collections.sort(liste, new Match.CompId());
       RecyclerView.Adapter adapter1 = new RVAdapter(liste);
        rv.setAdapter(adapter1);




    } catch (JSONException e) {
        e.printStackTrace();
    }catch (StringIndexOutOfBoundsException e){}








}

这是Match类:

public class Match {
String isim;
String kod;
String ust;
String alt;

Match(String isim, String kod, String ust, String alt) {
    this.isim = isim;
    this.kod = kod;
    this.ust = ust;
    this.alt = alt;
}

public static class CompId implements Comparator<Match> {
    @Override
    public int compare(Match arg0, Match arg1) {
        return Integer.parseInt(arg0.kod) - Integer.parseInt(arg1.kod);
    }
}

}

1 个答案:

答案 0 :(得分:0)

我不知道为什么会这样,但是在行

new

我正在检查变量赌注是否等于3。似乎在某些设备中,字符串“3”不会被读为“3”。我将此行更改为 if(bet == "3"){ liste.add(new Match(isim,kod,ust,alt));} } 它现在正在这些设备上运行。