上传图片的时候会弹出networkonmainthreadexception的异常,原因是在主线程中不能有其他的进行网络请求的操作,为了避免主线程出现假死的情况
1.利用代码直接写入在onCreate下面的setContentView(parentView);的下面
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork()
.penaltyLog().build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath()
.build());
导入包即可
2.使用AsyncTask异步上传
for(int i=0;i<size;i++)
{
path=Bimp.tempSelectBitmap.get(i).getImagePath();
myAsyncTask ma=new myAsyncTask(internal_photoName, path, MainActivity.this);
ma.execute(100);
}
//创建一个类
class myAsyncTask extends AsyncTask<Integer, Integer, String>{
String _internal_photoName;
String _path;
Context _context;
public myAsyncTask(String internal_photoName,String path,Context context)
{
_internal_photoName=internal_photoName;
_path=path;
_context=context;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected String doInBackground(Integer... params) {
// 已经选择好图片,上传图片
Date date = new Date();
_internal_photoName = date.getTime() / 1000+ "_activity" +".jpg";
String ftpUpload = FtpUploadUtil.ftpUpload(
FTPConstz.url, FTPConstz.port,
FTPConstz.username, FTPConstz.password,
FTPConstz.huodong_internal_path,
_path, "", _internal_photoName);
System.out.println("值 "+ftpUpload);
if(ftpUpload.equals("1")){
// post_load();
// Toast.makeText(_context, "上传成功!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(_context, "上传失败!", Toast.LENGTH_SHORT).show();
}
return "上传成功!";
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
Log.e("","result="+result);
Toast.makeText(_context, ""+result, Toast.LENGTH_SHORT).show();
}
}