王学岗Retrofit初探(三)——json的数据、xml数据和moshi

第一部分: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的库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值