第一部分:json数据
LoginGsonService 接口
package com.tz.architect.retrofit.simple5.inter;
import com.tz.architect.retrofit.simple5.model.UserBean;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
public interface LoginGsonService {
/**
*数据格式的转换 :Gson数据格式转换,需要gson夹包
*UserBean:json格式,返回model
*/
@FormUrlEncoded
@POST("LoginServlet")
public Call<UserBean> login(@Field("username") String uname,
@Field("password") String password);
}
SimpleRetrofitGson 类
package com.tz.architect.retrofit.simple5;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import com.tz.architect.retrofit.simple1.SimpleSystemLogin.OnHttpResultListener;
import com.tz.architect.retrofit.simple5.inter.LoginGsonService;
import com.tz.architect.retrofit.simple5.model.UserBean;
public class SimpleRetrofitGson {
private static String URL_UPLOAD = "http://192.168.2.1:8080/Dream_Architect_Retrofit_Server/";
public static LoginGsonService buildRetrofit() {
Retrofit retrofit = new Retrofit.Builder().baseUrl(URL_UPLOAD)
// 这里要改成gson
.addConverterFactory(GsonConverterFactory.create()).build();
// loginService实际是一个代理类
return retrofit.create(LoginGsonService.class);
}
public static void executeRetrofit(Call<UserBean> callLogin,
final OnHttpResultListener onHttpResultListener) {
try {
callLogin.enqueue(new Callback<UserBean>() {
@Override
public void onResponse(Call<UserBean> call,
Response<UserBean> response) {
UserBean userBean = response.body();
if (userBean != null) {
onHttpResultListener.onHttpResult(response.body()
.toString());
} else {
onHttpResultListener.onHttpResult("登录失败!");
}
}
@Override
public void onFailure(Call<UserBean> call, Throwable t) {
onHttpResultListener.onHttpResult("登录失败!");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public static void loginGson(String username, String password,
final OnHttpResultListener onHttpResultListener) {
LoginGsonService loginService = buildRetrofit();
Call<UserBean> callLogin = loginService.login(username, password);
executeRetrofit(callLogin, onHttpResultListener);
}
}
bean类
package com.tz.architect.retrofit.simple5.model;
public class UserBean {
private String name;
private String pwd;
private String sex;
public UserBean(String name, String pwd, String sex) {
super();
this.name = name;
this.pwd = pwd;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "UserBean [name=" + name + ", pwd=" + pwd + ", sex=" + sex + "]";
}
}
main类
package com.tz.architect.retrofit;
import android.app.Activity;
import android.os.Bundle;
import com.tz.architect.retrofit.simple1.SimpleSystemLogin;
import com.tz.architect.retrofit.simple1.SimpleSystemLogin.OnHttpResultListener;
import com.tz.architect.retrofit.simple2.SimpleOkHttpLogin;
import com.tz.architect.retrofit.simple3.SimpleRetrofitLogin;
import com.tz.architect.retrofit.simple4.SimpleRetrofitUploadImage;
import com.tz.architect.retrofit.simple5.SimpleRetrofitGson;
import com.tz.architect.retrofit.simple6.SimpleRetrofitXml;
import com.tz.architect.retrofit.simple7.SimpleRetrofitRxJava;
import com.tz.architect.retrofit.simple8.MyRetrofitTest;
import com.tz.architect.retrofit.utils.FileManager;
import com.tz.architect.retrofit.utils.ToastUtil;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// simpleSystemLogin();
// simpleOkHttpLogin();
// simpleRetrofitLoginSync();
// simpleRetrofitLoginAsync();
// simpleRetrofitLoginGetAsync();
// simpleRetrofitLoginGetQueryMap();
// simpleRetrofitUploadImage();
// simpleRetrofitLoginGson();
// simpleRetrofitConvertXml();
// simpleRetrofitRxJava();
simpleMyRetrofitTest();
}
private OnHttpResultListener onHttpResultListener = new OnHttpResultListener() {
@Override
public void onHttpResult(Object result) {
if (result == null) {
ToastUtil.showToast(MainActivity.this, "登录失败!");
} else {
ToastUtil.showToast(MainActivity.this, result.toString());
}
}
};
private void simpleSystemLogin() {
SimpleSystemLogin.login("Hello", "123", onHttpResultListener);
}
private void simpleOkHttpLogin() {
SimpleOkHttpLogin.loginSync("Hello", "123", onHttpResultListener);
}
private void simpleRetrofitLoginSync() {
SimpleRetrofitLogin.loginSync("Hello", "123", onHttpResultListener);
}
private void simpleRetrofitLoginAsync() {
SimpleRetrofitLogin.loginAsync("Hello", "123", onHttpResultListener);
}
// 发送get请求
private void simpleRetrofitLoginGetAsync() {
SimpleRetrofitLogin.loginGet("Hello", "123", onHttpResultListener);
}
private void simpleRetrofitLoginField() {
SimpleRetrofitLogin
.loginPostField("Hello", "123", onHttpResultListener);
}
private void simpleRetrofitLoginGetQueryMap() {
SimpleRetrofitLogin.loginGetQueryMap("Hello", "123",
onHttpResultListener);
}
// 上传图片
private void simpleRetrofitUploadImage() {
String imagePath = FileManager.getRecordFile().getAbsolutePath()
+ "/paint.png";
SimpleRetrofitUploadImage.uploadImage(imagePath, onHttpResultListener);
}
// 上传图片
private void simpleRetrofitLoginGson() {
SimpleRetrofitGson.loginGson("Hello", "123", onHttpResultListener);
}
private void simpleRetrofitConvertXml() {
SimpleRetrofitXml.getUserList();
}
private void simpleRetrofitRxJava() {
SimpleRetrofitRxJava.login("Hello", "123", onHttpResultListener);
}
private void simpleMyRetrofitTest() {
MyRetrofitTest.login("Hello", "123", onHttpResultListener);
}
}
第二部分:xml数据
我们先介绍些跟xml相关的注解,我自己写了一个xml文件,就以这个文件为例子吧
<root>
<user userid="1" name="zhang_xin1">我很矮,165cm</user>
<user userid="2" name="zhang_xin2">我很矮,175cm</user>
<user userid="3" name="zhang_xin3">我很高,185cm</user>
</root>
@Root:代表xml的根节点,需要在类上使用
@Element:注解代表根节点中下面子节点标签
@Attribute:注解代表标签中的属性,比如userid
@Text 注解代表标签内容比如 “我很矮,165cm”
看下我们构建的两个实体类
package com.example.retrofittest;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import java.util.List;
@Root(name = "root")
public class UserRootXml {
//根节点下面的子节点,标签的名称,子节点(UserInfoXml)需要做entry标记.
//我们在这里设置entry是"user",root列表对应的是user标签,一旦看到这个标签,
//就会立刻解析。如果这时候在有一个<student>标签,那是不认识的。
@ElementList(entry = "user", required = true, inline = true)
private List<UserInfoXml> userList;
public List<UserInfoXml> getUserList() {
return userList;
}
public void setUserList(List<UserInfoXml> userList) {
this.userList = userList;
}
}
package com.example.retrofittest;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.Text;
/**
* 子节点
*/
@Root(name="user")
public class UserInfoXml {
@Attribute
private String name;
@Attribute
private String userid;
@Text
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
这是接口和方法
package com.example.retrofittest;
import retrofit2.Call;
import retrofit2.http.GET;
public interface XmlLoginService {
@GET("XmlServlet")
Call<UserRootXml> getUserList();
}
我们看下如何实现
package com.example.retrofittest;
import android.util.Log;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.simplexml.SimpleXmlConverterFactory;
public class SimpleRetrofitXml {
private static String Testurl= "http://192.168.2.1:8080/Dream_Architect_Retrofit_Server/";
public static void getUserList() {
Retrofit retrofit = new Retrofit.Builder().baseUrl(Testurl).addConverterFactory(SimpleXmlConverterFactory.create()).build();
XmlLoginService xmlLoginService = retrofit.create(XmlLoginService.class);
Call<UserRootXml> userList = xmlLoginService.getUserList();
userList.enqueue(new Callback<UserRootXml>() {
@Override
public void onResponse(Call<UserRootXml> call, Response<UserRootXml> response) {
Log.i("wangddidi","服务器返回的内容:"+response.body().toString());
}
@Override
public void onFailure(Call<UserRootXml> call, Throwable t) {
}
});
}
}
看下打印输出
第三部分Moshi数据格式
Moshi is a modern JSON library for Android and Java. It makes it easy to parse JSON into Java objects:
Moshi也是一种解析JSON的库。