Servus zusammen!
Ich habe ein kleines Problem, vor dem ich früher schon einmal stand aber leider die Daten zur Lösung nicht mehr habe...
Ich lade ein JSON File übers Internet innerhalb meiner AsyncTask Klasse. Die erhlatenen Daten möchte ich in einer ListView ausgeben. Für die ListView verwende ich einen CustomArrayAdapter.
Mein Problem ist, dass ich die geladenen Daten nicht in die ListView bekomme.
Das Laden des JSON und verarbeiten in eine ArrayList<String> ist alles kein Thema...nur sobald ich
den Adapter setze bekomme ich: java.lang.IllegalStateException: System services not available to Activities before onCreate()
Nun habe ich mich schon auf die Suche gemacht und auch so einiges gefunden aber ich bekomme es einfach nicht hin...
So wie ich das verstanden habe (war schon recht spät/früh gestern), muss der Aufbau der Listview innerhalb der der onCreate stattfinden. Allerdings benötige ich ja erst einmal die Daten vom Server...
Meine MainActivity sieht so aus:
public class MainActivity extends Activity {
public Context context = this;
public ListView listView = null;
public CustomArrayAdapter adapter = null;
public RSSItems rssItems[];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.mylist);
new AsyncRSS().execute("http://search.twitter.com/search.json?q=kapalla");
}
public void updateAdapter(RSSItems rssItems[]){
listView.setAdapter(new CustomArrayAdapter(context, R.layout.list_item, rssItems));
}
}
Alles anzeigen
Und meine AsyncTaskClass sieht so aus:
public class AsyncRSS extends AsyncTask<String, String, String> {
private String resultString = null;
private RSSContent rssList = new RSSContent();
private ArrayList<String> rssContent = new ArrayList<String>();
private List<ArrayList<String>> rssListContent = new ArrayList<ArrayList<String>>();
private MainActivity mc = new MainActivity();
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
resultString = readTwitterFeed(params[0]);
System.out.println("DO IN BG");
return resultString;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
result(result);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String readTwitterFeed(String url) {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
Log.e(AsyncRSS.class.toString(), "Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
public void result(String result) throws JSONException {
JSONObject jObject = new JSONObject(result);
JSONArray jArray = jObject.getJSONArray("results");
for (int i = 0; i < jArray.length(); i++) {
JSONObject oneObject = jArray.getJSONObject(i);
// Pulling items from the array
String date = oneObject.getString("created_at");
String title = oneObject.getString("from_user");
String content = oneObject.getString("text");
String imgUrl = oneObject.getString("profile_image_url");
rssContent.add(date);
rssContent.add(title);
rssContent.add(content);
rssContent.add(imgUrl);
rssList.setContent(rssContent);
}
createList();
}
private void createList() {
rssListContent = rssList.getContent();
RSSItems rssItems[] = new RSSItems[rssListContent.size()];
for (int i = 0; i < rssListContent.size(); i++) {
rssItems[i] = new RSSItems(rssListContent.get(i));
}
mc.updateAdapter(rssItems);
}
}
Alles anzeigen
Ich hatte auch schon versucht, der ListView erst einen leeren Adapter hinzuzufügen und dann später zu aktualisieren, aber auch das hat nichts geholfen, bzw. die App crashen lassen...vllt. habe ich da auch einen Fehler gebaut gestern k.a.
Kann mir jemand helfen? Wäre super!
Danke
EDIT: Ich habe nun versucht hier den Code Highlighter richtig zu verwenden, aber irgendwas läuft da falsch!!!
EDIT2: Lag an Chrome -> Im FF funktioniert der Highlighter...