为什么要用Okhtt 和Retrofit
1.可以配置不同HTTP client来实现网络请求,如okhttp、httpclient等
2.请求的方法参数注解都可以定制
3.支持同步、异步和RxJava
4.超级解耦
5.可以配置不同的反序列化工具来解析数据,如json、xml等
6.使用非常方便灵活
7.框架使用了很多设计模式
1添加网络权限,添加依赖
<uses-permission android:name="android.permission.INTERNET/>
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile "com.squareup.retrofit2:adapter-rxjava2:2.2.0"
2封装类
这个代码相信大家都应该会 把需要的属性,封装起来
3 接口
package com.example.bx.okhttp_01;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
/**
* Created by BX on 2017/8/18.
*/
public interface IUserBiz {
@GET("get?")
Call<Resultcode> getResult(@Query("phone")String phone,@Query("key") String key);
@POST("get?")
@FormUrlEncoded
Call<Resultcode> postResult(@Field("phone")String phone ,@Field("key") String key);
}
Activity 中的代码
package com.example.bx.okhttp_01;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import okhttp3.OkHttpClient;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OkRetrofit_Get();
OkRetrofit_Post();
}
private void OkRetrofit_Post() {
OkHttpClient client=new OkHttpClient.Builder()
.build();
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://apis.juhe.cn/mobile/")
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
IUserBiz userBiz=retrofit.create(IUserBiz.class);
Call<Resultcode> call=userBiz.postResult("13026167375","69eae34c7c30b963a0ec2eeefc05a37d");
call.enqueue(new Callback<Resultcode>() {
@Override
public void onResponse(Call<Resultcode> call, Response<Resultcode> response) {
Log.d(TAG, "onResponse: "+ response.body().getResult().getCity());
}
@Override
public void onFailure(Call<Resultcode> call, Throwable t) {
}
});
}
private void OkRetrofit_Get() {
OkHttpClient client=new OkHttpClient.Builder()
.build();
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://apis.juhe.cn/mobile/")
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
IUserBiz userBiz=retrofit.create(IUserBiz.class);
Call<Resultcode> call=userBiz.getResult("13026167375","69eae34c7c30b963a0ec2eeefc05a37d");
call.enqueue(new Callback<Resultcode>() {
@Override
public void onResponse(Call<Resultcode> call, Response<Resultcode> response) {
Log.d(TAG, "onResponse: "+ response.body().getResult().getCity());
}
@Override
public void onFailure(Call<Resultcode> call, Throwable t) {
}
});
}
}
这些都是根据网络资料上写出来的,数据都请求到了 相对比较简单
初学者可以学一下 ,get和post 请求代码相似度比较高,如果要深
入系统的学习多去官网上看看