最近在重温知识,所以借此机会也想把自己写的一些心得写出来供大家分享,写的有误或者不好的地方望大家见谅,好了,废话少说,直接进入正题,下面给大家介绍的就是基于目前主流网络通信框架的okhttp实现的Android与Eclipse通信。
首先说明:我用的Android客户端是Android studio,现在基本上都是用AS来开发App的,我们也要跟上主流是吧,Eclipse服务器端我是用Tomcat来实现的,简单轻巧,其实开发javaweb项目时,用MyEclipse是最合适的,但是这个正版需要money,学生党表示很无奈,好了,环境介绍完了,下面就是纯代码了。
先从Eclipse服务器端说起吧,我这儿用的是servlet实现的,主要就是把核心代码doPost()方法给贴出来了
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8"); //解决中文乱码
response.setHeader("content-type","text/html;charset=UTF-8"); //解决中文乱码
PrintWriter out = response.getWriter();
Student student1 = new Student();
student1.setName("程建新");
student1.setAge(21);
student1.setBirthday("1996-09-08");
String[] str = {"读书", "运动"};
student1.setHobby(str);
Gson gson = new Gson();
out.print(gson.toJson(student1)); //打印Json数据
}
现在网络之间通信主流是用Json或xml通信,携带数据量较大,便于传输
下面是Android studio客户端的核心代码
private void getInformation() { String url = "http://localhost:8080/StudentServlet/Stu"; //服务器地址 OkHttpClient client = new OkHttpClient(); final Request request = new Request.Builder().url(url).build(); Call call = client.newCall(request); call.enqueue(new Callback() { //okHttp异步加载 @Override public void onFailure(Request request, IOException e) { Log.d("服务器连接", "连接失败!!!"); } @Override public void onResponse(Response response) throws IOException { // String str = response.body().string(); //注意这里用的是string()方法,而不能用toString()方法,两者是有区别的 // // Gson gson = new Gson(); // Student stu = gson.fromJson(str, Student.class); InputStream input = response.body().byteStream(); //用InputStream输入流接收数据 BufferedInputStream bufinput = new BufferedInputStream(input); byte[] buffer = new byte[10000]; int bytes = bufinput.read(buffer); final String str = new String(buffer, 0, bytes); Log.d("服务器连接", "连接成功!"); Message message = Message.obtain(); message.what = 1; Bundle bundle = new Bundle(); bundle.putString("Name", str); message.setData(bundle); handler.sendMessage(message); //View控件必须在主线程中更新 });
private Handler handler = new Handler(){ //接受Message信息,执行相应动作 @Override public void handleMessage(Message msg) { switch (msg.what){ case 1: Bundle bundle = msg.getData(); textView.setText(bundle.getString("Name", "NULL")); break; } } };