我有一个使用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);
}
}
}
答案 0 :(得分:0)
我不知道为什么会这样,但是在行
new
我正在检查变量赌注是否等于3。似乎在某些设备中,字符串“3”不会被读为“3”。我将此行更改为 if(bet == "3"){
liste.add(new Match(isim,kod,ust,alt));}
}
它现在正在这些设备上运行。