AsyncTask ProgressDialog ändern

SM-T110 UND GT-I9300

SM-T110 UND GT-I9300

Fortgeschrittenes Mitglied
17
Hallo, ich habe mit AsyncTask einen ProgressDialog erstellt, der eine Datei herunterlädt. nun möchte ich, dass sich "progressDialog.setMesssge" an einer bestimmten % Zahl ändert wie mache ich das?


Code:
protected void onProgressUpdate(String... progress){
	progressDialog.setProgress(Integer.parseInt(progress[0]));}
 
mit einer Abfrage:

Beispielsweise wenn 50% überschritten sind:

Code:
if(1.0*progressDialog.getProgress()/progressdialog.getMax()>=0.5){
    progressDialog.setMessage("50 Prozent sind überschritten!");
}
 
  • Danke
Reaktionen: SM-T110 UND GT-I9300
Danke ich werds mal ausprobieren!
 
nur noch eins ist unklar: was hat die 1.0* zu bedeuten?
 
Klappt nicht. Es kommt entweder "(APPNAME) angehalten" sobald ich den Button drücke. oder es lädt die Datei nicht herunter sondern springz von 0 auf 100 und der Dialog schließt sich wiede
 
Also If anfrage klappt nicht
 
Dann liegt der Fehler aber in deinem Code irgendwo, nicht an der if Abfrage.

Zeig doch mal den Code deines Asynctasks, wenigstens den deiner doInBackground() -methode
 
Zuletzt bearbeitet:
Also ich wüsste nicht was falsch ist: Hier der Code


Code:
progressbutton = (Button) findViewById(R.id.progressButton);
	useless = (ImageView) findViewById(R.id.uselessImage);
	progressbutton.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		new DownloadFromURL().execute(urlstring);}});}

	class DownloadFromURL extends AsyncTask<String, String, String>{
	@Override
		protected void onPreExecute(){
		super.onPreExecute();
			showDialog(progressType);}


	@Override
		protected String doInBackground(String... fileUrl){
		int count;
		try{
			URL url = new URL(fileUrl[0]);
			URLConnection urlConnection = url.openConnection();
			urlConnection.connect();
				

	int fileLength = urlConnection.getContentLength();
	InputStream inputStream = new BufferedInputStream(url.openStream(), 8192);
	OutputStream outputStream = new FileOutputStream("/sdcard/downloadedfile.zip");

	byte data[] = new byte[1024];
	long total = 0;
	while ((count = inputStream.read(data)) != -1){
		total += count;
		publishProgress("" + (int) ((total * 100) / fileLength));
		outputStream.write(data, 0, count);}
					

	outputStream.flush();
					

	outputStream.close();
	inputStream.close();} 
		catch (Exception e){
		Log.e("Error: ", e.getMessage());}
		return null;}
						

	protected void onProgressUpdate(String...progress){
	progressDialog.setProgress(Integer.parseInt(progress[0]));}
	
	

	@Override
		protected void onPostExecute(String file_url) {
			dismissDialog(progressType);
			Toast.makeText(getApplicationContext(), "Die Datei wurde erfolgreich heruntergeladen", Toast.LENGTH_SHORT).show();
			/**/
			String imagePath = Environment.getExternalStorageDirectory().toString() + "/downloadedfile.jpg";
			useless.setImageDrawable(Drawable.createFromPath(imagePath));}}


	@Override
    protected Dialog onCreateDialog(int id){
	switch (id){
	case progressType: // we set this to 0
		progressDialog = new ProgressDialog(this);
		progressDialog.setProgressNumberFormat("Bitte Warten...");
		progressDialog.setMessage("Wird Herunterladen");
		progressDialog.setIndeterminate(false);
		progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		progressDialog.setCancelable(false);
		progressDialog.show();
	return progressDialog;
	default:
	return null;}}
 
Warum benutzt du nicht publishProgress(Integer...values) ?

Ist doch umständlich erst in string zu wrappen und dann dort wieder den Integerwert herausholen...


Das mal probieren und halt anpassen an Integer... statt String...
Code:
total += count;
        publishProgress((int) (total * 100.0 / fileLength));

Hat es ein Grund warum "total" den Typ long hat und "filelength" den Typ int? Erwartest du "total" größer als "filelength" zu werden? :)
 
Zuletzt bearbeitet:
muss ich dann extra eine public method erstellen? weil des wird rot unterstrichen
 
klappt auch nicht. selbes problem wie vorher
 
Code:
    progressDialog.setMax(urlConnection.getContentLength());
    InputStream inputStream = new BufferedInputStream(url.openStream(), 8192);
    OutputStream outputStream = new FileOutputStream("/sdcard/downloadedfile.zip");

    byte data[] = new byte[1024];
    while ((count = inputStream.read(data)) != -1){
        publishProgress("" + count);
        outputStream.write(data, 0, count);}

Code:
protected void onProgressUpdate(String...progress){
    progressDialog.incrementProgressBy(Integer.parseInt(progress[0]));
    if(1.0*progressDialog.getProgress()/progressdialog.getMax()>=0.5)
        progressDialog.setMessage("50 Prozent sind überschritten!");
}
 
klappt auch nicht wieder dasselbe problem.
 
Jetzt geht gar nichts Mehr. netmal mehr mit dem alten Code. so ein sch*** mit diesem sch***. ich könnt grad echt ausrasten
 
War mir eine Freude dir zu helfen? :)

Wie sehen denn die logs aus? Kannst du denn das Problem etwas eingrenzen was genau nicht funktioniert?
 
Wie da als ich versucht habe die message ab einer bestimmten % Zahl zu ändern. Da hat sich kurz der Dialog geöffnet und sofort wieder geschlossen. jetzt habe ich alles zurückgesetzt mit dem Original code mit dem es vorher super funktioniert hat (ohne message aktualisierung) und jetzt kommt genau dasslebe. sorry dass ich das jetzt sagen muss aber mich kotzt die scheiße langsam echt an. ständig muckt die scheiße rum und macht net des, was man schreibt. [emoji44][emoji44][emoji44]
 
Ps: danke trotztdem dass du mir helfen wolltest
 
Lädt es so schnell runter oder crasht die app?
 
Lädt gar nichts runter crasht aber nicht. Der Dialog öffnet sich beleibt auf 0 schließt sich wieder und der Toast erscheint "Die Datei wurde erfolgreich heruntergeladen".

Ich kann dir ja mal per PN video schicken
 

Ähnliche Themen

D
Antworten
14
Aufrufe
1.704
chrs267
chrs267
C
  • Chicken Wing
Antworten
4
Aufrufe
851
Chicken Wing
C
Vapeilas91
  • Vapeilas91
Antworten
3
Aufrufe
698
swa00
swa00
Zurück
Oben Unten