在 Android 中将大数据发送到服务器的最佳方式
Best way to send large data to server in Android
我的 sdcard 中有 zip 文件,大小为 8-9 mb.I正在使用此库发送数据。
这是我的来源
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);
}
}
});
}
我的代码运行完美,但我想检查我的解决方案是否完整?
您需要 运行 在上传服务中而不是作为 Activity/UI 的一部分。如果用户终止 Activity(或者由于内存压力而将其删除),您将丢失上传。
我没有使用过这个特定的库,但像这样的库似乎很有用,而且快速浏览一下就会发现它具有通常需要的大部分功能:
https://github.com/gotev/android-upload-service
我的 sdcard 中有 zip 文件,大小为 8-9 mb.I正在使用此库发送数据。
这是我的来源
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);
}
}
});
}
我的代码运行完美,但我想检查我的解决方案是否完整?
您需要 运行 在上传服务中而不是作为 Activity/UI 的一部分。如果用户终止 Activity(或者由于内存压力而将其删除),您将丢失上传。
我没有使用过这个特定的库,但像这样的库似乎很有用,而且快速浏览一下就会发现它具有通常需要的大部分功能: https://github.com/gotev/android-upload-service