okHttp 的简单使用
引入Gradle依赖:compile 'com.squareup.okhttp3:okhttp:3.4.1'
HTTP GET请求
MainActivity代码如下:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* http-get请求
*绑定按钮的事件
* @param view
*/
public void httpGet(View view) {
new Thread() {
@Override
public void run() {
super.run();
String url = "http://www.baidu.com";
OkHttpClient client = new OkHttpClient();//创建okhttp实例
Request request = new Request.Builder()
.url(url).build();
Call call = client.newCall(request);
try {
Response response = call.execute();
if (response.isSuccessful()) {
Log.i(TAG, "httpGet: " + response.body().string());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
运行结果:
Response response = call.execute();这个是异步方式的,所以我开启了个子线程来执行,
否则会崩掉。。也可以不开启线程,那就可以这样做:
修改后MainActivity代码如下:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* get请求
*
* @param view
*/
public void httpGet(View view) {
String url = "http://www.baidu.com";
OkHttpClient client = new OkHttpClient();//创建okhttp实例
Request request = new Request.Builder()
.url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
//请求失败时调用
@Override
public void onFailure(Call call, IOException e) {
Log.i(TAG, "onFailure: " + e);
}
//请求成功时调用
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i(TAG, "onResponse: " + "ss");
if (response.isSuccessful()) {
Log.i(TAG, "onResponse: " + response.body().string());
}
}
});
}
}
运行结果是一样的,其实这个也是异步操作的。、
HTTP POST请求
自己搭个服务器吧。我用的是tomcat,访问自己的服务器。老是访问别人的服务器多没意思。哈哈。。
在eclipse先建个web工程,再创建个LoginServlet代码如下:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public LoginServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("GET请求成功");
response.getWriter().append("GET请求成功");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 防止乱码
*/
response.setContentType("text/html;charset=utf-8");
response. setCharacterEncoding("UTF-8");
request. setCharacterEncoding("UTF-8");
System.out.println("Post请求成功");
String name=request.getParameter("name");
System.out.println(name);
response.getWriter().append("Post请求成功");
}
}
然后把这个web项目部署到tomcat中就好了,这样我们的简单的服务器就搭建好了。
修改后MainActivity代码如下:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* get请求
*
* @param view
*/
public void httpGet(View view) {
//换成自己的ip就行
String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
OkHttpClient client = new OkHttpClient();//创建okhttp实例
Request request = new Request.Builder()
.url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
//请求失败时调用
@Override
public void onFailure(Call call, IOException e) {
Log.i(TAG, "onFailure: " + e);
}
//请求成功时调用
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i(TAG, "onResponse: " + "ss");
if (response.isSuccessful()) {
Log.i(TAG, "onResponse: " + response.body().string());
}
}
});
}
/**
* post请求
* @param view
*/
public void httpPost(View view){
//换成自己的ip就行
String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
OkHttpClient client = new OkHttpClient();//创建okhttp实例
FormBody body=new FormBody.Builder()
.add("name","张三")
.add("age","23")
.build();
Request request=new Request.Builder().post(body).url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
//请求失败时调用
@Override
public void onFailure(Call call, IOException e) {
Log.i(TAG, "onFailure: " + e);
}
//请求成功时调用
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
Log.i(TAG, "onResponse: " + response.body().string());
}
}
});
}
}
运行结果:
好了,一个简单的post请求演示完了,只是提交了个键值对到服务器中,接下来演示提交json数据到服务器中
修改后MainActivity代码如下:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "TAG";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* get请求
*
* @param view
*/
public void httpGet(View view) {
//换成自己的ip就行
String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
OkHttpClient client = new OkHttpClient();//创建okhttp实例
Request request = new Request.Builder()
.url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
//请求失败时调用
@Override
public void onFailure(Call call, IOException e) {
Log.i(TAG, "onFailure: " + e);
}
//请求成功时调用
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i(TAG, "onResponse: " + "ss");
if (response.isSuccessful()) {
Log.i(TAG, "onResponse: " + response.body().string());
}
}
});
}
/**
* post请求
* @param view
*/
public void httpPost(View view){
//换成自己的ip就行
String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
OkHttpClient client = new OkHttpClient();//创建okhttp实例
FormBody body=new FormBody.Builder()
.add("name","张三")
.add("age","23")
.build();
Request request=new Request.Builder().post(body).url(url).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
//请求失败时调用
@Override
public void onFailure(Call call, IOException e) {
Log.i(TAG, "onFailure: " + e);
}
//请求成功时调用
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
Log.i(TAG, "onResponse: " + response.body().string());
}
}
});
}
/**
* post请求 提交数据到服务器
* @param view
*/
public void httpPostJSON(View view){
String json="{\n" +
" \"name\": \"张三 \"\"age\": \"23 \"\n" +
"}";
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
//换成自己的ip就行
String url = "http://10.104.4.1:8080/okhttp/LoginServlet";
OkHttpClient client = new OkHttpClient();//创建okhttp实例
RequestBody body=RequestBody.create(JSON,json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
//请求失败时调用
@Override
public void onFailure(Call call, IOException e) {
Log.i(TAG, "onFailure: " + e);
}
//请求成功时调用
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
Log.i(TAG, "onResponse: " + response.body().string());
}
}
});
}
}
web工程下LoginServlet 类doPost方法
修改后如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 防止乱码
*/
response.setContentType("text/html;charset=utf-8");
response. setCharacterEncoding("UTF-8");
request. setCharacterEncoding("UTF-8");
/**
* 把请求的json数据读取出来。
*/
InputStream is=request.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(is, "utf-8"));
String line=null;
StringBuffer sb=new StringBuffer();
while((line=reader.readLine())!=null){
sb.append(line);
}
System.out.println(sb.toString());
response.getWriter().append("Post请求成功");
}
运行效果:
总结:
终于写完了,我是名初学者,有不对的地方请指正。
作者:song_shui_lin 发表于2016/10/26 18:17:18 原文链接
阅读:71 评论:0 查看评论