实现Android客户端与Eclipse服务器端基于Okthhp简单通信

最近在重温知识,所以借此机会也想把自己写的一些心得写出来供大家分享,写的有误或者不好的地方望大家见谅,好了,废话少说,直接进入正题,下面给大家介绍的就是基于目前主流网络通信框架的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;
        }
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_36431280/article/details/79099558