Upload (hochgeladene Bytes) status mit Retrofit?

  • Hi Leute,


    ich lade einen ca. 800KB langen base64 string per POST und Retrofit 2 hoch:

    Java
    void postSpecialData(String base64, Callback callback);


    wobei das Callback das Retrofit 2 Interface ist, mit:

    Code
    void onResponse(Call<T> call, Response<T> response); 
    void onFailure(Call<T> call, Throwable t);

    Dann kann ich mein Code Aufrufen, mit:

    Java
    getRestCommunicator().postSpecialData(encryptedBase64, new Callback() { 
      @Override public void onResponse(Call call, Response response) { 
        toast("Response code " + response.code());
      }
      @Override public void onFailure(Call call, Throwable t) { 
        toast("Failure REST CALL");
      }
    });

    Wie kann ich beim POST call den Fortschritt der hochgeladenen bytes abgreifen? Möchte es in einer Progressbar wiederspiegeln.


    Danke schonmal im voraus

  • Thnx bin dabei.
    Wobei ich habe das


    Java
    String base64

    nicht als Datei gespeichert und wollte es auch nicht speichern. Dieser String ist ca. 500 kB groß und den kann ich nach upload verwerfen.

    Mein buffer hat immer 2048 char's. Ich bekomme beim 2.ten durchlauf immer eine
    IndexOutOfBoundsException ? Wo ist denn der Offsetfehler?

  • Hi dein Fehler liegt bei der Read Methode.



    read = in.read(buffer, uploaded, buffer.length)


    der Offset „uploaded „ bezieht sich nicht auf die Datei (Stream) sondern auf dem Buffer der müsste immer „0“ sein wenn du den Buffer immer von vorne füllen willst.
    Der Offset ist beim zweiten durchlauf grösser als dein Buffer kann nicht gehen. Doku von Java Lesen.



    Eigentlich sollte „ read = in.read(buffer)“ reichen.




    Und das schreiben bitte auch so denn du Liest ein Char Array dann schreibe es auch wieder.



    sink.write(buffer, 0, read);


    noch ein link.


    https://code.i-harness.com/de/q/1fcb345

  • Warum eigent lich Char?

    Weil: StringReader::Reader::read(char[] cbuf)


    ..so meckert Andsroid Studio mit Can not resolve read(byte[])


    Andere Frage:
    die UploadProzesse werden bei mir zweimal aufgerufen. Debug log cat:


    1. progress wird aufgerufen

    Brainfuck
    APP UPLOAD progress: 2048
    APP UPLOAD progress: 4096
    APP UPLOAD progress: 6144
    APP UPLOAD progress: 8192
    APP UPLOAD progress: 10240
    APP UPLOAD progress: 12288
    APP UPLOAD progress: 14336
    ....


    2. dann kommt OkHttp mit dem langen base64 String:
    D/OkHttp: _9j_4AAQSkZJRgABAQA..........
    D/OkHttp: ..........[b][/b]
    D/OkHttp: c1dfHRWx0T32bF_SiKNI6KgANzlIHQLPIVYUKHZ7sgn8G-yeAKgoHfn1FY6wLrUMPX4IQmO1tugP
    D/OkHttp: --> END POST (-1-byte body)

    3. wieder progress:


    Brainfuck
    APP UPLOAD progress: 2048
    APP UPLOAD progress: 4096
    APP UPLOAD progress: 6144
    APP UPLOAD progress: 8192
    APP UPLOAD progress: 10240
    APP UPLOAD progress: 12288
    APP UPLOAD progress: 14336
    ....

    Ergo der Balken läuft zweimal durch????

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!