- Forum-Beiträge: 15
05.06.2014, 13:46:32 via Website
05.06.2014 13:46:32 via Website
Hallo,
ich studiere Medieninformatik und muss für Android eine WM-App erstellen. Das ganze ist grundsätzlich nicht kompliziert: Die Activity hat ein ExpandableListView, welches die aktuellen Spielergebnisse unterteilt in Spieltage anzeigt. Die Daten kommen von einer API (JSON). Das funktioniert auch soweit.
Das Problem: Ich möchte beim Download einen ProgressDialog anzeigen lassen, welcher den Nutzer drauf hinweißt, dass gerade gedownloaded wird. Ist der Download vorbei soll dieser Dialog verschwinden. Ich versuche das schon seit einigen Tagen zu lösen, aber es funktioniert einfach nicht! Entweder der Dialog wird gar nicht angezeigt oder erst nach dem Download!
Die wichtigsten Klassen:
- OverviewActivity (initialisiert das ListView, Adapter etc.)
- ResultControler (kümmert sich um Download der Daten)
- DownloadTask [AsyncTask!] (bekommt einen Link und gibt den JSON-Code als String zurück)
Hier erstmal ein paar Codeauszüge:
zu 1.: die Initialisierung:
public class OverviewActivity extends Activity implements OnResultListener {
ExpandableListView resultList;
ResultListAdapter adapter;
ResultController resultController;
OnResultListener resultListener;
ProgressDialog progressDia = new ProgressDialog(this);
AlertDialog.Builder alertDiaBuilder;
SparseArray<MatchDay> results = new SparseArray<MatchDay>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_overview);
initProgressDia();
initFunctions();
readOutData();
}
private void initFunctions() {
initResultList();
initResultController();
}
private void initResultList() {
resultList = (ExpandableListView) findViewById(R.id.result_list);
adapter = new ResultListAdapter(this, results);
resultList.setAdapter(adapter);
}
private void initResultController() {
resultController = new ResultController(this, this);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.menu_refresh_button:
readOutData();
break;
}
return true;
}
@Override
public void onUpdateInitiated() {
Log.d("WM", "Start Download"
progressDia.show();
}
@Override
public void onUpdateCanceled(int error) {
}
@Override
public void onUpdateCompleted() {
Log.d("WM", "End Download"
progressDia.dismiss();
}
@Override
public void onNewResults(SparseArray<MatchDay> results) {
this.results = results;
initResultList();
}
Hierzu muss ich sagen, über die Log-Ausgabe passiert genau das was ich will: Es wird genau dann angezeigt wenn der download beginnt, wenn er auch beginnt! Und wenn er endet! Leider funktioniert das mit dem ProgressDialog nicht! Kann mir jemand sagen warum das so ist?
zu 3.: Der AsyncTask:
public class DownloadTask extends AsyncTask<String, Integer, String> {
private String responseString;
@Override
protected String doInBackground(String... params) {
this.responseString = processHttpRequest(params[0]);
return responseString;
}
private String processHttpRequest(String url){
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = null;
try{
response = httpclient.execute(new HttpGet(url));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
responseString = out.toString();
} else {
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (Exception e) {
Log.d("WM", "HTTP-Request-Error"
}
return responseString;
}
}
Wo muss ich genau den ProgressDialog initialisieren und wie kann ich ihn wirklich VOR dem Download anzeigen lassen?
Ich bin am Verzweifeln... Wäre schön wenn mir jemand helfen könnte!
Danke!
Viele Grüße!
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.