Witam. Pisze aplikacje w której pobieram dane z serwera sql a później wysyłam je poprzez bundle do kilku fragmentów jaki arraylisty. Mam taki problem ze w androidzie 5.0 wszystko działa a gdy testuje aplikacje pod starszymi wersjami to mam błąd, że odwołuje sie do listy która jest pusta. Tylko dlaczego android 5.0 potrafi ja zapełnic danymi a starszy juz nie? Może ktoś ma jakieś pomysły? Z góry dziękuję
- Logi z Logcata
- Kawałki kodu który jest za to odpowiedzialny
Wróżyć nie potrafię ;).
Podejrzewam że problem jest w tej funkcji w której pobieram dane. A konkretnie w tym instrukcji if(typ=="3") ponieważ mam jeszcze kilka innych fragmentów do których pobieram dane w ten sposób ale tylko w tym jednym w środku funkcji mam ifa.
public ArrayList<String> wybierzDlaCKomp(String id) throws SQLException {
String SymEfektMod="";
String EfektKsztal="";
String SymbEfektKsztal="";
String typ="";
Connection con = connectionClass.CONN();
String query="SELECT IDtyp, Sylabus.IDsylabus, Nazwa_modulu.Nazwa, Wydzial.Nazwa_wydzialu, Kierunek_studiow.Kierunek, Efekt_ksztalcenia_modulu.Symbol, \n" +
" Efekt_ksztalcenia_modulu.Opis, Efekt_ksztalcenia_modulu.Symbol_efektu_modulu\n" +
"\n" +
"FROM Sylabus INNER JOIN\n" +
" Nazwa_modulu ON Sylabus.IDnazwa_modulu = Nazwa_modulu.IDnazwa_modulu INNER JOIN\n" +
"\t\t\t\t\t\t Wydzial ON Sylabus.IDnazwa_jednostki_prowadzacej = Wydzial.IDwydzial INNER JOIN\n" +
" Kierunek_studiow ON Sylabus.IDkierunek_studiow = Kierunek_studiow.IDkierunek_studiow INNER JOIN\n" +
" Kod_modulu ON Sylabus.IDkod_modulu = Kod_modulu.IDkod_modulu INNER JOIN\n" +
" Efekt_ksztalcenia_modulu ON Sylabus.IDsylabus = Efekt_ksztalcenia_modulu.IDsylabus \n" +
"\t\t\t\t\t\t where Sylabus.IDSylabus= '"+id+"'";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
ArrayList<String> pojemnik= new ArrayList<String>();
while (rs.next()) {
typ= rs.getString("IDtyp");
if(typ=="3") {
SymEfektMod = rs.getString("Symbol");
EfektKsztal = rs.getString("Opis");
SymbEfektKsztal = rs.getString("Symbol_efektu_modulu");
pojemnik.add(SymEfektMod);
pojemnik.add(EfektKsztal);
pojemnik.add(SymbEfektKsztal);
}
}
return pojemnik;
}
Jeśli chcesz sprawdzić czy dwa Stringi są identyczne to wywołujesz na zmiennej typu String metodę equals
, a nie operator porównania - ten służy do czegoś innego.
to że działało Ci na 5.0 prawdopodobnie wynika z różnic pomiędzy ART-em a Dalvikiem. ART kombiluje tylko raz aplikację przypisał zmienną typ do jakiejść referencji i nie przeprowadza później optymalizacji Stringów.
To jest właśnie najgorsze przy porównywaniu String, Integer etc przez ==. Nie że da Ci zły wynik, tylko że raz Ci da dobry a raz zły i tak naprawdę Ciężko jest przewidzieć co i jak