2017-03-11 76 views
-2

我正在開發一款類似OLX的Android應用程序,允許用戶添加廣告和課程從圖庫中選擇圖片上傳到我的服務器上。但上傳大圖需要很長時間。如何在Android應用程序中更快地上傳圖片?

我該如何解決這個問題?

我正在使用排球圖書館上傳圖像。有沒有更好的庫?

+0

嘗試使用改造上傳圖片 – knownUnknown

+0

你的圖像轉換爲Base64? –

+0

是的Azhar osws我使用的是base64,我首先將位圖轉換爲字符串,然後發佈到遠程服務器,有時會讓我內存不足 – aym1781969

回答

0

使用本

Retrofit retrofit = new Retrofit.Builder().client(okHttpClient).baseUrl(domain) 
      .addConverterFactory(GsonConverterFactory.create()).build(); 
    Service service = retrofit.create(Service.class); 

    RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), file); 

    final MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("file", file.getName(), requestBody); 
    final RequestBody filename = RequestBody.create(MediaType.parse("text/plain"), file.getName()); 

    Call<ServerResponse> upload = service.uploadFile(fileToUpload, filename); 

    upload.enqueue(new Callback<ServerResponse>() { 
     @Override 
     public void onResponse(Call<ServerResponse> call, final Response<ServerResponse> response) { 
      final ServerResponse serverResponse = response.body(); 
      if (serverResponse.getSuccess()) { 
       //Handle Response 
      } 
     } 

     @Override 
     public void onFailure(Call<ServerResponse> call, Throwable t) { 
      if(t instanceof SocketTimeoutException){ 
       Toast.makeText(getApplicationContext(), "Unable To Upload\nError: Socket Time out. Please try again", Toast.LENGTH_LONG).show(); 
      } 
      t.printStackTrace(); 
     } 
    }); 

服務接口

public interface Service { 
@Multipart 
@POST("path/upload.php") 
Call<ServerResponse> uploadFile(@Part MultipartBody.Part file, @Part("file") RequestBody name); 

}

+0

Adnan Momin,我認爲你是對的,但似乎更復雜是不是? – aym1781969

+0

@ aym1781969使用https://www.youtube.com/playlist?list=PLvhXArWo3eVxIMKJE5_zU1zb-ZHQISQT_此鏈接進行學習。這很容易 – knownUnknown

1

你的問題是相當廣泛的,但這裏有一些想法:

  • 圖片尺寸調整爲較小的大小:用戶可能上傳12-16萬像素的圖像,但1920×1080通常是綽綽有餘,這隻有2百萬像素,小很多。
  • 使用與有損壓縮不同的格式: 75%質量的JPEG圖片與100%幾乎無法區分,但它可以縮小2到3倍。
  • 增加請求的緩衝區大小:更高的緩衝區大小導致更少的數據包,這意味着更快的上傳。雖然如果用戶連接非常糟糕(數據包丟失非常高),較小的數據包有時可能會更快。

你會看到與前兩個點高的性能提升,你可能只看到一點點的改進與最後一點,如果你是從很遠的服務器在地理上。

相關問題