引用okHttp框架
在build.gradle添加okHttp的依赖
dependencies {
........
compile 'com.squareup.okhttp3:okhttp:3.9.0'
}
发送get请求
//get请求时键值对放在地址后,地址末尾加?后编写键值对,键值对之间用&连接
Request request = new Request.Builder()
.url("http://192.168.0.128:8080/VoiceNote/ServletTest?name=zero").build();
OkHttpClient client = new OkHttpClient();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
/**
* 此时还在非UI线程中
* @param call
* @param response
* @throws IOException
*/
@Override
public void onResponse(Call call, Response response) throws IOException {
final String res = response.body().string();
Log.i("okhttp", res);
//InputStream inputStream = response.body().byteStream();获取输入流,传输大文件时使用
//这里还在非UI线程中,如果有涉及刷新UI等操作,要切换到UI线程再进行
runOnUiThread(new Runnable() {
@Override
public void run() {
// textview.setText(res);
}
});
}
});
get请求加载图片
Request request = new Request.Builder()
.url("http://pic17.nipic.com/20111122/6759425_152002413138_2.jpg").build();
OkHttpClient client = new OkHttpClient();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
/**
* 此时还在非UI线程中
* @param call
* @param response
* @throws IOException
*/
@Override
public void onResponse(Call call, Response response) throws IOException {
long length=response.body().contentLength();//获取文件总长度
Log.i("okhttp", "length:"+length);
InputStream inputStream = response.body().byteStream();
final BitmapDrawable d= (BitmapDrawable) BitmapDrawable.createFromStream(inputStream,"hehe.jpg");
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(d.getBitmap());
}
});
}
});
发送post请求
String url="http://192.168.0.12:8080/VoiceNote/ServletTest";//发送请求的地址
OkHttpClient client=new OkHttpClient();
FormBody.Builder formBodyBuild=new FormBody.Builder();
formBodyBuild.add("name","zero");//此处添加所需要提交的参数
Request request=new Request.Builder().url(url)
.post(formBodyBuild.build()).build();
Call call=client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText("error");
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String res = response.body().string();
Log.i("okhttp", "response:" + res);
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText("success");
}
});
}
});
上面红字部分按实际需求修改:
发送字符串时
RequestBody requestBody = RequestBody
.create(MediaType.parse("text/plan;charset=utf-8)"), "你好啊");
Request request = new Request.Builder().url(url)
.post(requestBody).build();
发送json数据时
JSONObject object=new JSONObject();
try {
object.put("name","zero");
} catch (JSONException e) {
e.printStackTrace();
}
RequestBody requestBody=RequestBody
.create(MediaType.parse("application/json; charset=utf-8"),object.toString());
Request request = new Request.Builder().url(url)
.post(requestBody).build();
需要传多种数据时 使用
MultipartBody.Builder body=new MultipartBody.Builder();
RequestBody requestBody= body.setType(MediaType.parse("multipart/form-data"))
.addFormDataPart("name", "zero")
*******这里插入其他数据例如file、json、键值对等**********
.build();
Request request = new Request.Builder().url(url)
.post(requestBody).build();
不知道发送数据的类型可以百度搜索
HTTP Content-type 对照表
上面示例所请求的接口只是一个运行在Java Web项目的简单的Servlet,收到什么参数就返回什么参数
import java.io.IOException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson.JSON;
@WebServlet("/ServletTest")
public class ServletTest extends HttpServlet {
public ServletTest() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Map<String, String> params = new HashMap<>();
Map<String, String[]> map = request.getParameterMap();
for(String key : map.keySet()) {
// params.put(key, map.get(key)[0]);
params.put(key,URLDecoder.decode(map.get(key)[0],"utf-8"));
}
System.out.println("接收到的参数:"+params.toString());
response.setContentType("text/html;charset=utf-8");
response.getWriter().print(JSON.toJSONString(params));
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}