一 APP端代码
1.界面设计 一个ImageView,一个Button
2.定义控件并通过id找到
private ImageView ivImg;
private Button btnDownload;
ivImg = (ImageView) findViewById(R.id.ivImg);
btnDownload = (Button) findViewById(R.id.btnDownload);
3.在按钮事件里新建一个线程
new Thread(new Runnable() {
@Override
public void run() {
Bitmap img = getImg();//这一部分的方法见第4步
Message msg = imgHandler.obtainMessage();
msg.what = 0;
msg.obj = img;
imgHandler.sendMessage(msg);
}
}).start();
4.关于getImg()
private Bitmap getImg(){
Bitmap img = null;
try {
URL imgUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) imgUrl.openConnection();
conn.setRequestMethod("POST");
conn.setConnectTimeout(1000 * 6);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Charset", "UTF-8");
conn.connect();
//输出流写参数
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
String param = getParam();//这一部分的方法详见第五步
dos.writeBytes(param);
dos.flush();
dos.close();
int resultCode = conn.getResponseCode();
if(HttpURLConnection.HTTP_OK == resultCode){
InputStream is = conn.getInputStream();
img = BitmapFactory.decodeStream(is);
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return img;
}
5.关于getParam()方法,这一部分有点问题,为什么输入参数是这种形式
private String getParam(){
JSONObject jsObj = new JSONObject();
try {
jsObj.put("picFormat", "jpg");
jsObj.put("testParam", "9527");
} catch (JSONException e) {
e.printStackTrace();
}
return jsObj.toString();
}
6.定义一个消息处理器,用来更新主线程的图片
class ImageHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
img = (Bitmap)msg.obj;
if(img != null){
ivImg.setImageBitmap(img);
}
break;
default:
break;
}
}
}
二 服务器端的dopost方法
1.读取输入流数据
ServletInputStream is = request.getInputStream();
BufferedReader bufRd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
StringBuffer strBuf = new StringBuffer();
String strContent = new String("");
while((strContent = bufRd.readLine()) != null){
strBuf.append(strContent);
}
2.获取请求参数
String jsStr = strBuf.toString();
System.out.println("param--->" + jsStr);
3.输出图片数据
try {
response.setContentType("image/jpeg;charset=UTF-8");
OutputStream out = response.getOutputStream();
// String imgUrl = "C:\\Users\\lish\\Desktop\\test.jpg";
String imgUrl = "C:\\Users\\XiRuo\\Desktop\\test1.jpg";
FileInputStream fis = new FileInputStream(imgUrl);
int len = -1;
byte[] data = new byte[1024];
while((len = fis.read(data)) != -1){
out.write(data, 0 , len);
}
fis.close();
out.close();
} catch (Exception e) {
PrintWriter writer = response.getWriter();
response.setContentType("text/html;charset=UTF-8");
writer.write("无法打开图片!");
writer.close();
}