ProgressDialog und SnackBar in MainActivity

Das was da uf der seite steht blick ich nicht. und ich ich woll eigentlich wissen wie ich in MEINEM CODE:

progressbutton=(Button)findViewById(R.id.progressButton);
useless=(ImageView)findViewById(R.id.image);
progressbutton.setOnClickListener(new View.OnClickListener(){

@override
public void onClick(View v){
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMax(100);
progressDialog.setProgress(0);
//progressDialog.setTitle("");
progressDialog.setMessage("Bitte warten...");
progressDialog.setCancelable(false);
progressDialog.setProgressStyle(progressDialog.STYLE_HORIZONTAL);
progressDialog.setIndeterminate(false);
progressBarHandler.sendEmptyMessage(0);
progressDialog.show();}});

progressBarHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (progressBarStatus>=100) {
progressDialog.dismiss();
}
else{
progressBarStatus ++;
progressDialog.incrementProgressBy(1);
progressBarHandler.sendEmptyMessageDelayed(0,100);}}
};


einen solchen THREAD einbinde. Beispiele aus dem Internet habe ich noch nie verstanden (hab alles aus YouTube). und ich könnt echt ausrasten, wenn mir beim Programmieren die ganze Zeit nur 1 Fehler angezeigt wird (z.B "Missing }") und sobald ich fertig bin auf einmal 500 Fehler. Sorry wenn das i irgendeiner weiße aufbraußend, oder aggressiv wirkt. da ich ja auch noch Android 6 habe muss ich einen THREAD und im nachhinein die Permissions extra programmieren..
 
Hallo SM,

jetzt bitte ich Dich schon zum zweiten Male, Deinen Code in Code-Tags zu setzen.
Ich habe bis jetzt alle deinen vorherigen Post ändern müssen.

Solltest du es nochmal vergessen , werde ich die Post einfach löschen - wenn du
mich schon irgendwie ignorieren möchtest.

Also mach das jetzt bitte selbst richtig : Code gehört in Code-Tags !

Zu Deiner Frage :

In Deinen Code kann man das nicht so einbinden.

Das was du machen möchtest erfordert Erfahrung in der Programmierung , weshalb ich Dir erst mal
mit dem Link oben einen Teil gegeben habe , damit du erst mal Threads und das Requesten von
Daten aus den Netz verstehst .

Erst dann , wenn du den oberen Link verstanden hast, kannst du den Progress auch verwenden.

Ergo : Du wirst am Erlernen des oberen Links nicht drumrum kommen - das muss ERST 100 % sitzen.
 
sorry. wie mache ich die Code tags? ich benutze nähmlich die App
 
Dafür musst du in den Desktop- Browser.
Dein Quellcode ist dort ja auch drauf.

So wie du uns deinen Code präsentierst , ist er unformatiert und kein Mensch kann ihn lesen
(Oder nur sehr schwer )
 
Ah ok . danke wegen dem Thread. ich versteh das ganze auf den Inet seiten nicht, weil 1 verwirrt es mich, dass da ständig solche sch*** " //blabla" sind. 2. Ich kann es nicht umsetzen, bzw weis ich nicht wie ich es nutzen soll. 3. Programmiere ich nicht mit dem PC. 4. Ich habe probleme mit der übersicht und mit dem sinn.. also bin ich eigentlich ein noob was programmiren angeht? . Und wenn etwas auf englisch erklärt wird, versteh ich es schon 3 mal nicht.
 
Lieber SMT,

ich bin ein wenig überrascht : Mit was Programmierst du denn ?
Ohne AndroidStudio kann man nicht vernünftig programmieren.

Und ohne einigermaßen fundierte Englischkenntnisse wirst du auch nicht viel weiterkommen.,
denn die wesentlichen Dinge sind nun mal alle nur auf Englisch beschrieben und erklärt.
(Selbst die Basisdinge)

90% unserer Zeit verbringen wir Programmierer auf englischen Seiten

Wenn diese zwei Voraussetzungen bei dir nicht erfüllt sind , dann wirst du auch zu keinem
Ergebnis kommen.
 
ich programmiere mit meinem Smartphone ich benutze AIDE aus dem play store. funktioniert sehr gut. Ich bin eigentlich ganz gut in Englisch (Zeignis Note 2) aber das was ich bisher in der Schuld gelernt habs ist Britisches Englisch. Obwohl es na nicht viele unterschiede gibt. aber das was da auf den Websites steht, kann ich mir nicht erklären (bedeutungen von worten ect).


kann mir den niemand des Code umschreiben? sodass ich ihn nur noch in AIDE austauschen (und nur noch URL einfügen) muss und ggf. eine (oder paar) neue library hinzufügen muss? wäre echt eine erleichterung. könnte mjr denm auch jemand ein (wenns das gibt) ein Buch zur Programmkerung von Android apps empfehlen?(buch sollte dann aber auf den stand von 6.0.1 sein)
 
a) MIt AIDE hat hier so gut wie keiner Erfahrung - das ist auch eher kein Programmiertool
Das reicht maximal für eine einfache App mit einem Knopf !!

b) Eben mal mit Code umschreiben ist leider nicht

Für das was du haben möchtest , würden selbst Profis 2-3 Stunden dran sitzen , und darüber hinaus wissen wir nicht einmal
welche Daten du in welchem Format du von einer Webseite haben magst.

Wenn das nur eine Zeile wäre , dann hättest du die Antwort schon längst.



Ich Kürze das mal ein wenig ab :

So gerne wir dir auch hier helfen , aber ich denke , du musst dir erst mal fundierte Kenntnisse
in der OOP Programmierung & Java aneignen.
Rheinwerk Computing :: Java ist auch eine Insel - index

Damit bist du erst mal ein paar Wochen beschäftigt.

Erst dann , wenn das zu 100 % sitzt kannst du dich an eine App machen.

Dann musst du dir UNBEDINGT einen PC besorgen und AndroidStudio darauf installieren

Dann stehe wir Dir auch gerne mit jeder Antwort zur Verfügung .

Wir können dir hier leider kein Programm schreiben oder dir das Programmieren beibringen.
 
(Code sollte diesmal als Tag dargestellt sein)
Habe mir mal ein Code aus dem Internet angesehen und in nachgeschrieben
funktioniert, app stürzt nicht ab aber kann das beispielbild nicht herunterladen mir wird ein Error-Toast angezeigt unter anderem mit "PERMISSION DENIED" woran liegt das jetzt? ich habe Android 6.0 und in der Manifest ist sowohl INTERNET als auch WRITE_EXTERNAL_STORAGE drin.:cursing:

Code:
Button b = (Button) findViewById(R.id.progressButton);
            b.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                showProgress(dwnload_file_path);
                                
                                new Thread(new Runnable() {
                                            public void run() {
                                                    downloadFile();
                                                }
                                        }).start();
                            }
                    });
        }

    void downloadFile(){

            try {
                    URL url = new URL(dwnload_file_path);
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

                    urlConnection.setRequestMethod("GET");
                    urlConnection.setDoOutput(true);

                    //connect
                    urlConnection.connect();

                    //set the path where we want to save the file           
                    File SDCardRoot = Environment.getExternalStorageDirectory();
                    //create a new file, to save the downloaded file
                    File file = new File(SDCardRoot,"downloaded_file.png");

                    FileOutputStream fileOutput = new FileOutputStream(file);

                    //Stream used for reading the data from the internet
                    InputStream inputStream = urlConnection.getInputStream();

                    //this is the total size of the file which we are downloading
                    totalSize = urlConnection.getContentLength();

                    runOnUiThread(new Runnable() {
                                public void run() {
                                        dialog.setMax(totalSize);
                                    }               
                            });

                    //create a buffer...
                    byte[] buffer = new byte[1024];
                    int bufferLength = 0;

                    while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
                            fileOutput.write(buffer, 0, bufferLength);
                            downloadedSize += bufferLength;
                            // update the progressbar //
                            runOnUiThread(new Runnable() {
                                        public void run() {
                                                dialog.setProgress(downloadedSize);
                                                float per = ((float)downloadedSize/totalSize) * 100;
                                                //cur_val.setText("Downloaded " + downloadedSize + "KB / " + totalSize + "KB (" + (int)per + "%)" );
                                            }
                                    });
                        }
                    //close the output stream when complete //
                    fileOutput.close();
                    runOnUiThread(new Runnable() {
                                public void run() {
                                        // pb.dismiss(); // if you want close it..
                                    }
                            });           

                } catch (final MalformedURLException e) {
                    showError("Error : MalformedURLException " + e);         
                    e.printStackTrace();
                } catch (final IOException e) {
                    showError("Error : IOException " + e);         
                    e.printStackTrace();
                }
            catch (final Exception e) {
                    showError("Error : Please check your internet connection " + e);
                }       
        }

    void showError(final String err){
            runOnUiThread(new Runnable() {
                        public void run() {
                                Toast.makeText(MainActivity.this, err, Toast.LENGTH_LONG).show();
                            }
                    });
        }

    void showProgress(String file_path){
            dialog = new ProgressDialog(MainActivity.this);
            //dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            //dialog.setContentView(R.layout.activity_main);
            dialog.setTitle("Download Progress");
            dialog.setProgressStyle(dialog.STYLE_HORIZONTAL);
            dialog.show();
            dialog.setCancelable(false);
            dialog.setProgress(0);
 
Wenn du M benutzt, musst du auch die Berechtigungen manuell für die App setzen
und später per Programmcode die Berechtigung beim Nutzer anfragen
 
Boar ich habs schonmal gemacht. glaub da war sogar eine weiche if Abfrage nötig.... ich google kurz... ist es dann egal? wo ich das eintrage? oder sollte es am anfang sein?

PS: wird mein code jetzt richtig dargestellt?( ich bin wieder in der app)
 
Code-Tag : Ja sieht gut aus
 
ok. ich glaube ich fange an mich nach und nach gaaaaaaamz langsam meinem Ziel zu nähern.
 
habe es geschafft!! Eine ca 400MB datei wird heruntergeladen, doch seit eier letzten änderung, wird nur noch eine 1.00KB datei erstellt mehr nicht. ist an dem Code etwas flasch?
Code:
Button b = (Button) findViewById(R.id.progressButton);
    //ImageView useless=(ImageView) findViewById(R.id.uselessImage);
    b.setOnClickListener(new OnClickListener() {
        
        @Override
            public void onClick(View v) {
                progressDialog = new ProgressDialog(MainActivity.this);
                progressDialog.setMessage("Datei wird heruntergeladen                                                                          Größe: 368MB");
                progressDialog.setCancelable(false);
                progressDialog.setMax(100);
                progressDialog.setProgress(0);
                progressDialog.setProgressStyle(progressDialog.STYLE_SPINNER);
                progressDialog.show();
                
    new Thread(new Runnable(){
        @Override
            public void run(){
                downloadFile();}})
                .start();}});}
                        
            private void downloadFile() {
                try {           
                    URL fileurl = new URL(urlstring);
                    URLConnection urlConnection = fileurl.openConnection();
                    urlConnection.connect();

                    InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream(),8192);
                    File downloadordner = new File(Environment.getExternalStorageDirectory(), "Download");
                    if(!downloadordner.exists()){
                    downloadordner.mkdirs();}
                    File downloadedFile = new File(downloadordner, "CM14" + ".zip");
                    OutputStream outputStream = new FileOutputStream(downloadedFile);
                    
                    byte[] buffer = new byte[1024];
                    int read;
                        while ((read = inputStream.read(buffer)) != -1){
                            outputStream.write(buffer, 0, read);
                            
                            outputStream.flush();
                            outputStream.close();
                            inputStream.close();
                            //final Bitmap bitmap = BitmapFactory.decodeFile(downloadedFile.getAbsolutePath());
                            
    runOnUiThread(new Runnable() {
    @Override
        public void run() {
            //useless.setImageBitmap(bitmap);
            progressDialog.dismiss();}});}}

        catch (Exception e){
            e.printStackTrace();

    runOnUiThread(new Runnable(){
    @Override
        public void run() {
                Toast.makeText(getApplicationContext(), "Die Datei wurde erfolgreich heruntergeladen", Toast.LENGTH_SHORT).show();
            progressDialog.dismiss();}});}


Bin langsam echt am durchdrehn.
 
So habe es geschafft. Nur wie bin ich drum herum gekommen, dass ich die permissions in die MainActivity.java einbinden musste? obwohl ich Android 6.0.1 installiert habe.. Naja, es hat geklappt, das ist die Hauptsache. Habe mir einen Code ais dem Internet genau angeschaut und nachgeschrieben. der Fortschritt wird ebenfalls angezeigt. Habe mein Ziel erreicht! Nur noch 1 Frage: Wieso ist meine app bei anderen codes immer angestürzt, als die Png, jpg datei in eine bitmap umgewandelt werden musste, um angezeigt zu werden?

Code:
        progressbutton = (Button) findViewById(R.id.progressButton);
            useless = (ImageView) findViewById(R.id.uselessImage);
            progressbutton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                // starting new Async Task
                                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();
                            // show progress bar 0-100%
                            int fileLength = urlConnection.getContentLength();
                            InputStream inputStream = new BufferedInputStream(url.openStream(), 8192);
                            OutputStream outputStream = new FileOutputStream("/sdcard/downloadedfile.jpg");

                            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);
                                }
                            // flushing output
                            outputStream.flush();
                            // closing streams
                            outputStream.close();
                            inputStream.close();

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

            // progress bar Updating

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

            @Override
            protected void onPostExecute(String file_url) {
                    dismissDialog(progressType);
                    String imagePath = Environment.getExternalStorageDirectory().toString() + "/downloadedfile.jpg";
                    useless.setImageDrawable(Drawable.createFromPath(imagePath));
                }
        }

    //progress dialog
    @Override
    protected Dialog onCreateDialog(int id) {
            switch (id) {
                    case progressType: // we set this to 0
                        progressDialog = new ProgressDialog(this);
                        progressDialog.setMessage("File is Downloading. Please wait...");
                        progressDialog.setIndeterminate(false);
                        progressDialog.setMax(100);
                        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                        progressDialog.setCancelable(true);
                        progressDialog.show();
                        return progressDialog;
                    default:
                        return null;
                }
        }
 
So klappt alles super. Progress wjrd angezeigt und datei wjrd heruntergeladen. wie ändere ich die progressDialog.setMessage("") ab einer bestimmten % zahl. standart habe ich eingegeben "Wird heruntergeladen. Bitte warten..." 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();
                
//Zeige fortschritt 0-100%
                
                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);}
                    
//Output flushen
                    
                    outputStream.flush();
                    
//Streams schließen
                    
                    outputStream.close();
                    inputStream.close();}
                        catch (Exception e){
                        Log.e("Error: ", e.getMessage());}
                        return null;}
                        
//Fortschritt aktualisieren 1-2%...
            
    protected void onProgressUpdate(String... progress){
        
//...Zeige Fortschritt in %
                    
    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));}}

    //ProgressDialog allgemein
    
        @Override
        protected Dialog onCreateDialog(int id){
        switch (id){
        case progressType: // we set this to 0
            progressDialog = new ProgressDialog(this);
            progressDialog.setProgressNumberFormat("");
            progressDialog.setMessage("Wird heruntergeladen. Bitte warten...");
            progressDialog.setIndeterminate(false);
            progressDialog.setMax(100);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.setCancelable(false);
            progressDialog.show();
        return progressDialog;
        default:
        return null;}}
PS:
Falls ihr den Code unübersichtlich findet wegen den grünen //... einträgen kann ich nur sagen, dass es besser für mich ist. die waren aber schon so . habe sie nur auf Deutsch übersetzt. in etwa
 
  • Danke
Reaktionen: markus.tullius und swa00
So sieht es doch schon gut aus.:thumbsup:
Du hättest es auch einfacher haben können. Indem du zuerst die Aufgabe der App programmiert hättest (den Download). Und dann das Beiwerk.
Ich vermute, du wärst in der Hälfte der Zeit fertig geworden. Und wenn Probleme beim Beiwerk auftreten, kann man sie nach hinten stellen, und andere Sachen programmieren, weil die App ja schon funktioniert. Wenn du viel Pech hast, bekommst du die ganzen Teile nicht mehr zusammen.
 
Ok. Bi froh, dass es jetzt endlich klappt. Wie programmiere ich den Code jetzt so, dass sich die ".setMessage" des ProgressDialogs an einer bestimmten % zahl ändert. ?
 

Ähnliche Themen

S
Antworten
0
Aufrufe
587
Sergio13
S
M
  • MikelKatzengreis
Antworten
5
Aufrufe
114
swa00
swa00
M
Antworten
3
Aufrufe
852
maksimilian
M
Zurück
Oben Unten