使用retrofit时创建接口可以在其中定义多个方法吗
1个回答
展开全部
retrofit版本为1.9.0,2.0.0以后版本有不同的写法,但道理是一致的。
先上代码
public class WXRequest {
private static IWX iWX;
private static IWX getIWX(Activity activity) {
if (iWX == null) {
synchronized (UserRequest.class) {
if (iWX == null) {
RestAdapter adapter = getAdapter();
iWX = adapter.create(IWX.class);
}
}
}
return iWX;
}
protected static RestAdapter getAdapter() {
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.BASIC)
.setEndpoint("https://api.weixin.qq.com/sns/")
.setConverter(new BaseConverter())
.build();
return restAdapter;
}
interface IWX {
@GET("/oauth2/access_token")
void accessToken(@Query("appid") String appid,
@Query("secret") String secret,
@Query("code") String code,
@Query("grant_type") String grant_type,
Callback<String> callback);
@GET("/userinfo")
void userInfo(@Query("access_token") String access_token,
@Query("openid") String openid,
Callback<String> callback);
}
/***
* 发起请求获取Token
*/
public static void accessToken(final Activity activity, String code) {
Callback<String> back = new Callback<String>() {
@Override
public void success(String object, Response response) {
GSBToken gsbToken = Json.getGSBToke(object);
getApplaction(activity).getBus(activity).post(gsbToken);
}
@Override
public void failure(RetrofitError error) {
}
};
IWX iwx = getIWX(activity);
iwx.accessToken(WXConstants.APP_ID, WXConstants.SECRET, code, "authorization_code", back);
}
/***
* 请求得到用户信息
*/
public static void getUserInfo(final Activity activity, String access_token, String openid) {
Callback<String> back = new Callback<String>() {
@Override
public void success(String object, Response response) {
getApplaction(activity).getBus(activity).post(object);
}
@Override
public void failure(RetrofitError error) {
}
};
IWX iwx = getIWX(activity);
iwx.userInfo(access_token, openid, back);
}
private static GSBApplication getApplaction(Activity activity) {
Application application = activity.getApplication();
return (GSBApplication) application;
}
}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
1、getIWX(Activity activity) 方法是一个单例方法,用来得到接口IWX的实现类
2、getAdapter()方法得到retrofit的RestAdapter类,通过该类可以实现声明的接口,其中BaseConverter类实现了Converter接口声明的两个方法,该类用于定义网络请求的结果类型
3、IWX接口中的两个方法分别用于得到用户的授权access_token值和用户的详细信息,具体的参数含义请参考微信的api文档,方法中注解的具体含义请参考这里
4、accessToken(final Activity activity, String code) 方法是用于外部调用的具体方法,通过配置具体参数调用IWX的accessToken()方法来得到具体的access_token值并执行回调信息。getUserInfo(final Activity activity, String access_token, String openid)同理
5、上面的代码中的Callback回调对微信端返回的Json格式的String值进行了类型转换,将其转换为具体的逻辑对象,并通过otto对接受者发送了该对象,可根据具体逻辑进行修改
先上代码
public class WXRequest {
private static IWX iWX;
private static IWX getIWX(Activity activity) {
if (iWX == null) {
synchronized (UserRequest.class) {
if (iWX == null) {
RestAdapter adapter = getAdapter();
iWX = adapter.create(IWX.class);
}
}
}
return iWX;
}
protected static RestAdapter getAdapter() {
RestAdapter restAdapter = new RestAdapter.Builder()
.setLogLevel(RestAdapter.LogLevel.BASIC)
.setEndpoint("https://api.weixin.qq.com/sns/")
.setConverter(new BaseConverter())
.build();
return restAdapter;
}
interface IWX {
@GET("/oauth2/access_token")
void accessToken(@Query("appid") String appid,
@Query("secret") String secret,
@Query("code") String code,
@Query("grant_type") String grant_type,
Callback<String> callback);
@GET("/userinfo")
void userInfo(@Query("access_token") String access_token,
@Query("openid") String openid,
Callback<String> callback);
}
/***
* 发起请求获取Token
*/
public static void accessToken(final Activity activity, String code) {
Callback<String> back = new Callback<String>() {
@Override
public void success(String object, Response response) {
GSBToken gsbToken = Json.getGSBToke(object);
getApplaction(activity).getBus(activity).post(gsbToken);
}
@Override
public void failure(RetrofitError error) {
}
};
IWX iwx = getIWX(activity);
iwx.accessToken(WXConstants.APP_ID, WXConstants.SECRET, code, "authorization_code", back);
}
/***
* 请求得到用户信息
*/
public static void getUserInfo(final Activity activity, String access_token, String openid) {
Callback<String> back = new Callback<String>() {
@Override
public void success(String object, Response response) {
getApplaction(activity).getBus(activity).post(object);
}
@Override
public void failure(RetrofitError error) {
}
};
IWX iwx = getIWX(activity);
iwx.userInfo(access_token, openid, back);
}
private static GSBApplication getApplaction(Activity activity) {
Application application = activity.getApplication();
return (GSBApplication) application;
}
}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
1、getIWX(Activity activity) 方法是一个单例方法,用来得到接口IWX的实现类
2、getAdapter()方法得到retrofit的RestAdapter类,通过该类可以实现声明的接口,其中BaseConverter类实现了Converter接口声明的两个方法,该类用于定义网络请求的结果类型
3、IWX接口中的两个方法分别用于得到用户的授权access_token值和用户的详细信息,具体的参数含义请参考微信的api文档,方法中注解的具体含义请参考这里
4、accessToken(final Activity activity, String code) 方法是用于外部调用的具体方法,通过配置具体参数调用IWX的accessToken()方法来得到具体的access_token值并执行回调信息。getUserInfo(final Activity activity, String access_token, String openid)同理
5、上面的代码中的Callback回调对微信端返回的Json格式的String值进行了类型转换,将其转换为具体的逻辑对象,并通过otto对接受者发送了该对象,可根据具体逻辑进行修改
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询