1

我在我的SD卡中有zip文件,大小爲8-9 mb。我正在使用此庫發送數據。在Android中向服務器發送大數據的最佳方式

https://github.com/loopj/android-async-http

,這是我的源

private void sendSubmitRequest(File file) 
{ 
    AsyncHttpClient client = new AsyncHttpClient(); 

    RequestParams params = new RequestParams(); 
    showpDialog("loading"); 

    try 
    { 

     params.put("vin", vinNumber.getText().toString()); 
     params.put("polygon", polygonAdapter.getItem(spinnerPosition).getId()+""); 


     params.put("scanner_key", vinScannerModel.getSecretKey()); 
     params.put("status", status); 
     params.put("user", vinScannerModel.getId()+""); 

     InputStream inputStream = null; 
     inputStream = new FileInputStream(file.getAbsolutePath()); 
     byte[] buffer = new byte[8192]; 
     int bytesRead; 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     Base64OutputStream output64 = new Base64OutputStream(output, Base64.DEFAULT); 
     try { 
      while ((bytesRead = inputStream.read(buffer)) != -1) { 
       output64.write(buffer, 0, bytesRead); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     output64.close(); 

     String attachedFile = output.toString(); 


     params.put("photos", attachedFile); 

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


    client.post(ServerUtil.addVin, params, new TextHttpResponseHandler() { 
     @Override 
     public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { 

      showOneItemDialog(throwable.toString(),false); 
      hidepDialog(); 


      Log.d("server status",responseString+""); 
     } 

     @Override 
     public void onSuccess(int statusCode, Header[] headers, String responseString) { 
      Log.d("server status",responseString+""); 
      try { 
       hidepDialog(); 
       JSONObject mainJsonObject = new JSONObject(responseString.toString()); 
       boolean status=mainJsonObject.getBoolean("status"); 
       String desc=mainJsonObject.getString("desc"); 
       if(desc!=null) 
        showOneItemDialog(desc,status); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
       showOneItemDialog(e.toString(),false); 
      } 
     } 
    }); 




} 

我的代碼工作完美,但我想檢查我的解決方案是完整的?

回答

2

您需要在上傳服務中運行此操作,而不是作爲活動/用戶界面的一部分。如果用戶殺死該活動(或者由於內存壓力而被刪除),則會丟失上傳。

我沒有使用過這種特殊的庫,但一個這樣看起來像是你會發現有用的,看一眼就表明它具有最之一通常所需要的功能: https://github.com/gotev/android-upload-service

+0

感謝您的關注。如何我可以在上傳服務中使用我的請求參數?我如何發送郵政方法此上傳服務? – BekaKK

+0

你可以使用一個自定義的OkHttp客戶端,它應該允許你設置你需要的所有標題等。就像我說的,但是我之前沒有用過這個。 – wblaschko

+0

謝謝,我明天再試。我會告訴你最終結果 – BekaKK

相關問題