我想通过将图像发送到php脚本来上传图像。如果网络连接良好,它可以正常工作。但有时它不起作用。例如,当互联网连接缓慢时。所以我正在寻找一种上传图像的方法,连接速度较慢。我能做什么?文件大小已经很小了,大约为40kb。代码应该尝试上传图像,直到完成为止。
编辑:上传代码:
public void upload(String uploadImage){
SharedPreferences settings = getSharedPreferences("App", 0);
String emailaddress = settings.getString("mailaddress", null);
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("image",uploadImage));
nameValuePairs.add(new BasicNameValuePair("email", emailaddress));
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new
HttpPost("http://domain.de/uploadImage.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
try {
Thread.sleep( 10000 );
}catch (InterruptedException e1) {
e1.printStackTrace();
}
upload(uploadImage);
}
}
使用AsyncTask在后台运行上传过程。。您可以在加载操作时显示进度条。
public class UploadProgress extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
dialog.setMessage("Please wait...");
dialog.setCancelable(false);
dialog.show();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
// Things to be done while execution of long running operation is in progress. For example updating ProgessDialog
}
@Override
protected void onPostExecute(Void result)
{
//Post Execute
dialog.cancel();
}
@Override
protected Void doInBackground(Void... params) {
// Your operation..Dont Edit Any Views here
boolean isDataSubmitted = false;
while (!isDataSubmitted) {
count++;
if (count < 2)//Count depends on you {
try {
//Call your upload method here
//If its success your dataSubmitted will go true
isDataSubmitted = true;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}