首先来说说 代码较多 android自带请求方式 HttpURLConnection,Okhttp
注意:很多人会不小心加了s所以导致最后请求不下来数据 因为现在大多网址没有加密安全 所以我们就用HttpURLConnection
实现思想主要是 HttpURLConnection用IO流配合Handler 传递去实现请求
String geturl = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
HttpURLConnection httpURLConnection;
@SuppressLint("HandlerLeak")
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String s = msg.obj.toString();
Gson gson = new Gson();
MBean mBean = gson.fromJson(s, MBean.class);
data = mBean.getData();
MAdapter mAdapter = new MAdapter(MainActivity.this, data);
xv1.setAdapter(mAdapter);
xv1.setLayoutManager(new LinearLayoutManager(MainActivity.this));
xv1.setPullRefreshEnabled(true);
xv1.setLoadingMoreEnabled(true);
}
};
class TT extends Thread{
int page;
public TT(int page) {
this.page = page;
}
@Override
public void run() {
super.run();
try {
Log.d("数据","进来了");
URL url = new URL("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page="+page);
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("GET");
if(httpURLConnection.getResponseCode() == 200){
Log.d("数据","进来了");
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = bufferedReader.readLine())!=null){
sb.append(line);
}
Log.d("数据",sb.toString());
Message message = new Message();
message.obj = sb.toString();
handler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
Volley
表单请求
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
StringRequest stringRequest = new StringRequest(Request.Method.GET, "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("数据",response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(stringRequest);
json请求
class loginInter extends Thread{
@Override
public void run() {
super.run();
final String telephone = mEtAccount.getText().toString();
final String vCode = mEtverifty.getText().toString();
RequestQueue requestQueue = Volley.newRequestQueue(LoginActivity.this);
HashMap<String, String> params = new HashMap<String,String>();
params.put("telephone", telephone);
params.put("role", "2");
params.put("vCode", vCode);
JSONObject paramJsonObject = new JSONObject(params);
JsonObjectRequest mJsonObjectRequest = new JsonObjectRequest(Request.Method.POST,
"http://api.dev.woodlina.cn/v2/user/vclogin", paramJsonObject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("数据","成功了"+response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("数据",""+error.getMessage());
}
}){
//...
};
requestQueue.add(mJsonObjectRequest);
}
}
Okhttp
一.OkHttp的历史和意义
一个处理网络请求的开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso)
用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient,现在已经打不出来)。
尽管Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相比HttpClient实在是太难用,太弱爆了。
OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。
优点:
允许连接到同一个主机地址的所有请求,提高请求效率
共享Socket,减少对服务器的请求次数
通过连接池,减少了请求延迟
缓存响应数据来减少重复的网络请求
减少了对数据流量的消耗
自动处理GZip压缩
导入依赖
implementation ‘com.squareup.okhttp3:okhttp:3.12.1’
代码
OkHttpClient okHttpClient = new OkHttpClient();
okhttp3.Request build = new okhttp3.Request.Builder().url(geturl).build();
Call call = okHttpClient.newCall(build);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
Log.d("数据",response.body().string());
}
});
xutils
x.http().get(new RequestParams(geturl), new org.xutils.common.Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Log.d("数据",result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});