android 38 Abdroid客户端和服务端交互

服务端:

package com.sxt.day05;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.codehaus.jackson.map.ObjectMapper;

import com.sxt.day05.entity.User;

@WebServlet("/Login")
public class Login extends HttpServlet {
    private static final long serialVersionUID = 1L;
    ArrayList<User> users;

    public Login() {
        super();
        User user=new User("张飞", "1234", "13377889966", "[email protected]");
        users=new ArrayList<>();
        users.add(user);
        user=new User("王菲", "1234", "13577889966", "[email protected]");
        users.add(user);
        user=new User("刘亦菲", "1234", "133077889966", "[email protected]");
        users.add(user);
        user=new User("咖啡", "1234", "13877889966", "[email protected]");
        users.add(user);
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name=request.getParameter("name");//获取客户端发过来的名字
        if(name==null){
            return ;
        }
        name=new String(name.getBytes("iso8859-1"),"utf-8");
        String pwd=request.getParameter("pwd");
        for(int i=0;i<users.size();i++){
            User user=users.get(i);
            if(name.equals(user.getName())&&pwd.equals(user.getPwd())){
                ObjectMapper om=new ObjectMapper();//jackson-core-asl.jar
                om.writeValue(response.getOutputStream(), user);//将user对象以输出流发送给客户端
                System.out.println(user.toString());
                break;
            }
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ArrayList<User> list=new ArrayList<>();
        request.setCharacterEncoding("utf-8");
        String name=request.getParameter("name");
        for(int i=0;i<users.size();i++){
            User user=users.get(i);
            if(user.getName().indexOf(name)>=0){//name在user的名字中
                list.add(user);
            }
        }
        ObjectMapper om=new ObjectMapper();
        om.writeValue(response.getOutputStream(), list);
    }

}

客户端:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入姓名"
        android:text="菲"/>
    <EditText
        android:id="@+id/etPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入登陆密码"
        android:text="123456"
        android:password="true"/>

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="GET方式登陆" />
    <Button
        android:id="@+id/btnQuery"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="POST方式查询" />

</LinearLayout>

客户端Activity:

package com.sxt.day06_03;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.List;

import org.apache.http.client.utils.URLEncodedUtils;
import org.codehaus.jackson.map.ObjectMapper;

import com.sxt.day06.entity.User;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
    private static final String PATH="http://10.0.2.2:8080/Day06_Servlet/Login_Servlet";//服务端地址

    EditText metName,metPwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        setListener();
    }

    private void setListener() {
        setLoginClickListener();
        setQueryClickListener();
    }

    private void setQueryClickListener() {//查询,POST方式
        findViewById(R.id.btnQuery).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(){//访问网络要在工作线程搞
                    public void run() {
                        String name=metName.getText().toString();
                        name="name="+name;
                        try {
                            byte[] data=name.getBytes("utf-8");
                            URL url=new URL(PATH);
                            HttpURLConnection conn=(HttpURLConnection) url.openConnection();
                            conn.setConnectTimeout(5000);
                            conn.setReadTimeout(5000);
                            conn.setRequestMethod("POST");
                            conn.setDoOutput(true);//像服务端发送数据
                            OutputStream out = conn.getOutputStream();
                            out.write(data);
                            out.flush();
                            if(conn.getResponseCode()!=200){
                                return ;
                            }
                            ObjectMapper om=new ObjectMapper();
                            List<User> users=om.readValue(conn.getInputStream(), List.class);
                            Log.i("main",users.toString());
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    };
                }.start();
            }
        });
    }

    private void setLoginClickListener() {
        findViewById(R.id.btnLogin).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread(){//访问网络要在工作线程搞
                    public void run() {
                        String name=metName.getText().toString();
                        String password=metPwd.getText().toString();
                        StringBuilder sb=new StringBuilder(PATH);//PATH地址
                        try {
                            sb.append("?name=").append(URLEncoder.encode(name, "utf-8"))
                            .append("&password=").append(password);
                            URL url=new URL(sb.toString());//
                            HttpURLConnection conn=(HttpURLConnection)url.openConnection();
                            conn.setReadTimeout(5000);//读取权限5秒,否则断开
                            conn.setConnectTimeout(5000);//连接时间5秒,否则断开
                            conn.setRequestMethod("GET");//
                            if(conn.getResponseCode()!=200){
                                Toast.makeText(MainActivity.this, "连接服务端失败", 2000).show();
                                return ;
                            }
                            ObjectMapper om=new ObjectMapper();
                            User user = om.readValue(conn.getInputStream(), User.class);
                            Log.i("main",user.toString());
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    };
                }.start();
            }
        });
    }

    private void initView() {
        metName=(EditText) findViewById(R.id.etName);
        metPwd=(EditText) findViewById(R.id.etPassword);
    }

}

客户端项目描述文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sxt.day06_03"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />
    <uses-permission android:name="android.permission.INTERNET"/>   安卓想访问网络要申请网络权限
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.sxt.day06_03.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
时间: 2024-08-01 10:51:27

android 38 Abdroid客户端和服务端交互的相关文章

Android客户端与服务端交互之登陆示例

今天了解了一下android客户端与服务端是怎样交互的,发现其实跟web有点类似吧,然后网上找了大神的登陆示例,是基于IntentService的 1.后台使用简单的servlet,支持GET或POST.这个servlet最终返回给前台一个字符串flag,值是true或false,表示登录是否成功. servlet使用之前需要配置,主义servlet的servlet-name要和servlet-mapping的servlet-name一致,否则找不到路径 我是在myEclipse上创建的一个we

python3中实现客户端与服务端交互发送文件

在python3中实现客户端与服务端程序交互,从客户端发送文件到服务端 客户端代码:client.py #!/usr/bin/env python #_*_ encoding=utf-8 _*_ import socket,sys,os ip_port = ('127.0.0.1',9999) sk = socket.socket() sk.connect(ip_port) container = {'key':'','data':''} while True:     input_data =

android客户端与服务端交互的三种方式

android客户端向服务器通信一般有以下选择: 1.传统的java.net.HttpURLConnection类 2.apache的httpClient框架(已纳入android.jar中,可直接使用) 3.github上的开源框架async-http(基于httpClient) ---------------------------------------------------------------------------------- 下面分别记录这三种方式的使用, 传统方式: /**

关于AIDL客户端与服务端交互的包名问题-package

今天在做一个有关AIDL的例子的时候,遇到一个小问题,死活两个进程就是无法通信.按着书上的例子做的(此处代码出自疯狂Android讲义第2版),还是出错,最后在网上查了下才知道是包名的问题.也就是说自己定义的那个AIDL接口所在的包的包名必须保持客户端和服务器端一致.否则会报错,程序强制退出.错误信息如下(事物绑定失败): 在调试模式下会看到如下异常(目标调用异常)抛出: 之所以这样是因为我的包名不一致,如下:                               两者所在的包不一样,这是

基于socket简易版客户端,服务端交互

简易版客户端服务端交互 常识 AF_UNIX 是基于文件类型的套接字家族 AF_INET是 基础网络类型的套接字家族 socket 模块属性很多,可以直接使用from module import *语句 ,这样socket所有的数据都被带劲命名空间里了. 减少代码量(少用) 服务端 #1导入 import socket # 2.获取套接字 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #3绑定 s.bind(('127.0.0.1',807

Android WebView与服务端交互Demo

使用WebView可以让Android端的开发工作大量减少,原因是在服务端可以为其做一定的工作,下面这个小Demo就实现了从Android客户端与服务端的交互.我这里客户端使用的工具是Eclipse,服务端使用MyEclipse. 实现效果图: 客户端: 点击登录按钮后,页面跳转,而在服务端Console中看到如下(只看最后一行即可): 可以看到服务端收到了客户端发过来的用户名:yao. 源代码: 客户端: activity_main: <RelativeLayout xmlns:android

Android客户端与服务端(jsp)之间json的传输与解析【附效果图附源码】

最近有个项目需要用到json的传输,之前不是太了解,在网上找了些相关资料,写了一个小小的demo,可以实现基本功能:android客户端发送json到服务端,服务端使用jsp接收,解析后以json的形式返回给客户端,客户端接收打印,先看看运行的效果截图,源码会在文章的末尾给出. 1.服务端:接收到json后解析打印,然后发送json到客户端 2.客户端,收到服务端返回的json后打印 简单的介绍下源码: 服务端使用json.jsp来接收解析客户端传过来的json,json的解析需要使用lib目录

Android 客户端与服务端JSP相互传递中文

为了兼容简体.繁体及其他语系,推荐使用UTF-8编码. 首选,我们看看Android端应该怎么做: 在发送前,应该对参数值要进行UTF-8编码,我写了一个static的 转换函数,在做发送动作前用它将参数值转换成utf8编码: public class NetUtil { static public String toUtf8Url(String value) { try { return java.net.URLEncoder.encode(value, "utf8"); } cat

python socket编程之客户端和服务端简单交互

服务端 #_*_ coding:utf-8 _*_ #导入socket模块 import socket # 创建socket对象 sk = socket.socket() #绑定侦听的IP和端口号 ip_port = ('192.168.9.213',9999) sk.bind(ip_port) #最大连接数 sk.listen(5) #接受请求,接受请求的时候可以获取到客户端的socket对象,以及客户端的IP和端口 #通过while循环,让服务端一直接受客户端请求 print "正在等待客户