Hallo liebe Entwickler,
ich habe eine "Bestenliste" als ListView realisiert, die über eine SQL-Abfrage gefüllt und der abhängig vom jeweiligen Namen auch ein "Proflbild" zugeordnet wird. Das funktioniert auch soweit, aber die App wird extrem langsam, seit ich die Profilbilder implementiert habe.
Logcat meldet: "Skipped 49 frames! The application may be doing too much work on its main thread."
Im Monitor springt der allocated Speicher auf 116 MB hoch, obwohl die 9 Bilder nur in Summe 512 KB groß sind?
Java
public class FillList extends AsyncTask<String, String, String> {
String z = "";
List<Map<String, String>> prolist = new ArrayList<Map<String, String>>();
@Override
protected void onPostExecute(String r) {
String[] from = {"A", "B", "C", "D"};
int[] views = {R.id.Platzierung, R.id.Name, R.id.profilbild, R.id.Anzahl};
final SimpleAdapter ADA = new SimpleAdapter(getActivity(),
prolist, R.layout.lsttemplate, from,
views);
lstpro.setAdapter(ADA);
}
@Override
protected String doInBackground(String... params) {
try {
Connection con = connectionClass.CONN();
if (con == null) {
z = "Error in connection with SQL server";
} else {
String query = "Select Count(ID) as Anzahl, Name from scan Group by Name Order by Anzahl Desc ";
PreparedStatement ps = con.prepareStatement(query);
ResultSet rs = ps.executeQuery();
int i = 1;
while (rs.next()) {
Map<String, String> datanum = new HashMap<String, String>();
datanum.put("A", i + ".");
datanum.put("B", rs.getString("Name"));
//Bildernamen haben denselben Namen, wie die abgefragten Namen ==> den Personen die Profilbilder zuordnen:
datanum.put("C", String.valueOf(getResources().getIdentifier(rs.getString("Name").toLowerCase(), "drawable", getActivity().getPackageName())));
datanum.put("D", rs.getString("Anzahl"));
prolist.add(datanum);
i = i + 1;
}
z = "Success";
}
} catch (Exception ex) {
z = "Error retrieving data from table";
}
return z;
}
}
Alles anzeigen
Ich hoffe, ich stelle hier keine dumme Frage und hoffe, dass ihr mir helfen könnt! Wenn ihr noch weitere Infos benötigt, dann meldet euch einfach.
Christian