这里有一个完整的代码异步任务来发送数据 Http
private class MyAsyncTaskPupuk extends AsyncTask<Void,Object ,Void> {
boolean bNodata=false;
boolean bError=false;
@Override
protected Void doInBackground(Void... arg0) {
bNodata=false;
bError=false;
recordCount=cursorSend.getCount();
if (recordCount<=0){//
bNodata=true;
return null;
}
cursorSend.moveToFirst();
publishProgress(0,"Sending data started");
//SystemClock.sleep(1000);
CHamaRecord rec=new CHamaRecord();
for (int i=0; i<recordCount; i++){
if (isCancelled()) break;
rec.lID=cursorSend.getLong(0);
rec.dLongitude=cursorSend.getDouble(1);
rec.dLatitude=cursorSend.getDouble(2);
rec.dAccuracy=cursorSend.getDouble(3);
rec.sFilename=cursorSend.getString(4);
rec.nUserId=cursorSend.getInt(5);
rec.nRate=cursorSend.getInt(6);
rec.lDate=cursorSend.getLong(7);
rec.sSent=cursorSend.getString(8);
rec.IDSite=cursorSend.getString(9);
rec.alamatSite=cursorSend.getString(10);
rec.komoditas=cursorSend.getString(11);
rec.luasSite=cursorSend.getString(12);
rec.petugas=cursorSend.getString(13);
rec.jnsHama=cursorSend.getString(14);
rec.jmlHama=cursorSend.getString(15);
rec.sn=cursorSend.getString(16);
rec.pn=cursorSend.getString(17);
rec.manufaktur=cursorSend.getString(18);
rec.lblHama=cursorSend.getString(19);
rec.lblKomoditas=cursorSend.getString(20);
rec.lblPetugas=cursorSend.getString(21);
publishProgress(1,i,rec);
if (!SendDataFoto(rec)){
recordCount=i;
bError=true;
break;
}
else {
//change flag sent
rec.sSent=CGeneral.strSent;
cDBPupuk.updateEntry(rec.lID, rec);
}
cursorSend.moveToNext();
}
return null;
}//doInBackground
private boolean SendDataFoto(CHamaRecord rec){
String slon=String.format("%f", rec.dLongitude);
String slat=String.format("%f", rec.dLatitude);
String sacc=String.format("%f", rec.dAccuracy);
String srate=String.format("%d",rec.nRate);
String sid=String.format("%d",rec.nUserId);
String ids=String.format(rec.IDSite);
String alt=String.format(rec.alamatSite);
String kmd=String.format(rec.komoditas);
String ls=String.format(rec.luasSite);
String op=String.format(rec.petugas);
String jns=String.format(rec.jnsHama);
String jml=String.format(rec.jmlHama);
String sn=String.format(rec.sn);
String pn=String.format(rec.pn);
String mFact=String.format(rec.manufaktur);
String lblhama=String.format(rec.lblHama);
String lblKomoditas=String.format(rec.lblKomoditas);
File file=new File(rec.sFilename);
String sfname=file.getName();
String cfname=file.getName();
int i=0;
String lfname=rec.sFilename;
sfname = sfname.substring(0, sfname.lastIndexOf("."));
Calendar cal=Calendar.getInstance();
cal.setTime(new Date(rec.lDate));
String sdat=CUtilities.DateToString(cal);
String url;
String spupuk;
if (CGeneral.nPupukOrPelihara==CGeneral.ACTIVITY_FOR_PUPUK){
url = CGlobalConfig.getURLRcvrPupuk();
spupuk="Hama";
}
else{
url = CGlobalConfig.getURLRcvrPeliharaImage();
spupuk="pelihara";
}
Bitmap bmp=BitmapFactory.decodeFile(lfname);
ByteArrayOutputStream bao = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 90, bao);
byte[] ba = bao.toByteArray();
HttpEntity entity=null;
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
ByteArrayBody bab = new ByteArrayBody(ba, spupuk+"_"+cfname);
MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("image", bab);
reqEntity.addPart("category", new StringBody(spupuk));
reqEntity.addPart("file_name", new StringBody(spupuk+"_"+cfname));
reqEntity.addPart("rate", new StringBody(srate));
reqEntity.addPart("tgl", new StringBody(sdat));
reqEntity.addPart("user_id", new StringBody(sid));
reqEntity.addPart("latitude", new StringBody(slat));
reqEntity.addPart("longitude", new StringBody(slon));
reqEntity.addPart("accuracy", new StringBody(sacc));
reqEntity.addPart("id_site", new StringBody(ids));
reqEntity.addPart("alamat_site", new StringBody(alt));
reqEntity.addPart("komoditas", new StringBody(kmd));
reqEntity.addPart("luas_area", new StringBody(ls));
reqEntity.addPart("petugas", new StringBody(op));
reqEntity.addPart("jenis_hama", new StringBody(jns));
reqEntity.addPart("jumlah_hama", new StringBody(jml));
reqEntity.addPart("serial", new StringBody(sn));
reqEntity.addPart("p_number", new StringBody(pn));
reqEntity.addPart("manufaktur", new StringBody(mFact));
httppost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httppost);
entity = response.getEntity();
} catch (Exception e) {
Log.e(e.getClass().getName(), e.getMessage());
}
String temp = null;
try {
temp = EntityUtils.toString(entity);
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (temp.compareTo("SUCCESS") == 0) {
publishProgress(0,"Send Ok");
SystemClock.sleep(500);
return true;
}
else{
publishProgress(0,"Send Fail");
return false;
}
}
@Override
protected void onProgressUpdate(Object... arg) {
Integer oi=(Integer)arg[0];
String oStr;
CHamaRecord rec;
int flag=oi.intValue();
int nVal;
String str;
TextView tvStatus=(TextView) layoutSendDialog.findViewById(R.id.tvPupukSendStatus);
TextView tview;
switch (flag) {
case 0 :
oStr=(String)arg[1];
tvStatus.setText(oStr);
break;
case 1 :
oi=(Integer)arg[1];
rec=(CHamaRecord)arg[2];
nVal=oi.intValue();
str="Send record #"+String.format("%d",nVal);
tvStatus.setText(str);
str=String.format("%d", rec.lID);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendID);
tview.setText(str);
str=String.format(rec.IDSite);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendIDSite);
tview.setText(str);
str=String.format(rec.alamatSite);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendAlamat);
tview.setText(str);
str=String.format(rec.lblKomoditas);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendKomoditas);
tview.setText(str);
str=String.format(rec.luasSite);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendLuas);
tview.setText(str);
str=String.format(rec.lblPetugas);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendPetugas);
tview.setText(str);
str=String.format(rec.lblHama);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendJenis);
tview.setText(str);
str=String.format(rec.jmlHama);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendJumlah);
tview.setText(str);
str=String.format(rec.sn);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendSerial);
tview.setText(str);
str=String.format(rec.pn);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendProduk);
tview.setText(str);
str=String.format(rec.manufaktur);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendManufaktur);
tview.setText(str);
str=String.format("%+3.5f", rec.dLongitude);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendLongitude);
tview.setText(str);
str=String.format("%+3.5f", rec.dLatitude);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendLatitude);
tview.setText(str);
/*str=String.format("%2.2f", rec.dAccuracy);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendAccuracy);
tview.setText(str);*/
Date dt=new Date(rec.lDate);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendDate);
tview.setText(dt.toLocaleString());
/*str=String.format("%d", rec.nRate);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendRating);
tview.setText(str);
str=String.format("%d", rec.nUserId);
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendOperator);
tview.setText(str); */
File file=new File(rec.sFilename);
String fname=file.getName();
tview = (TextView) layoutSendDialog.findViewById(R.id.tvPupukSendFilename);
tview.setText(fname);
break;
}
}
//
@Override
protected void onPostExecute(Void unused) {
TextView tvStatus=(TextView) layoutSendDialog.findViewById(R.id.tvPupukSendStatus);
if (bNodata){
tvStatus.setText("No data to be sent!!!");
}else {
if (bError){
tvStatus.setText("Fail at record #"+String.format("%d",recordCount));
}
else {
tvStatus.setText("Sending Data : Finished");
}
}
// dismissDialog(CGeneral.DIALOG_SEND);
}
protected void onCancelled(Void unused) {
dismissDialog(CGeneral.DIALOG_SEND);
}
}
应用程序工作,但是当我输入错误的 url 或连接超时时,应用程序被强制关闭。
这是我的日志猫
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): FATAL EXCEPTION: AsyncTask #1
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): java.lang.RuntimeException: An error occured while executing doInBackground()
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at java.lang.Thread.run(Thread.java:1019)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): Caused by: java.lang.IllegalArgumentException: HTTP entity may not be null
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at org.apache.http.util.EntityUtils.toString(EntityUtils.java:110)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at org.apache.http.util.EntityUtils.toString(EntityUtils.java:146)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at hariff.ltis.inputhama.CInputHamaApp$MyAsyncTaskPupuk.SendDataFoto(CInputHamaApp.java:1307)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at hariff.ltis.inputhama.CInputHamaApp$MyAsyncTaskPupuk.doInBackground(CInputHamaApp.java:1040)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at hariff.ltis.inputhama.CInputHamaApp$MyAsyncTaskPupuk.doInBackground(CInputHamaApp.java:1)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-25 10:11:27.554: ERROR/AndroidRuntime(2587): ... 4 more
01-25 10:11:27.570: DEBUG/u-blox(1308): ublox_stop :
01-25 10:11:27.570: WARN/ActivityManager(1308): Force finishing activity hariff.ltis.mainmenu/hariff.ltis.inputhama.CInputHamaApp
强制关闭temp = EntityUtils.toString(entity);
如何解决?所以当我输入错误的 url 或连接超时时,应用程序不会强制关闭并显示消息"Send Failed"
。?
BR
亚历克斯