Android 连接本地服务器

1.服务器代码
struts.xml添加如下代码

<package name="activity" namespace="/" extends="json-default">
    <action name="loginActivity" class="jxnu.edu.cn.x3321.action.LoginActivityAction"
        method="loginActivity">
            <result type="json">
                <!-- 返回类型一定要设置成json,不设置返回页面 -->
            </result>
        </action>
</package>

实体类和数据库工具类见之前的代码
UserDao

在/WebContent/WEB-INF/lib下添加以下6个用于解析json数据的jar包
这里写图片描述

UserServiceImpl.java

public class UserServiceImpl implements UserService {

    DbConnection db=new DbConnection();
    ResultSet rs=null;
    @Override
    public boolean loginCheck(String userName, String passWord) {
        boolean bl=false;
        //System.out.println("in loginCheck..."+userName);
        String strSql="select * from user_a where userName='"+userName+"'";
        //System.out.println("in loginCheck..."+strSql);
        rs=db.executeQuery(strSql);
        try {
            while(rs.next()) {
                bl=true;
                break;
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return bl;
    }
}

LoginActivityAction.java

public class LoginActivityAction extends ActionSupport {
    String userName;
    String passWord;
    UserService us=new UserServiceImpl();
    HttpServletResponse response=ServletActionContext.getResponse();

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassWord() {
        return passWord;
    }
    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
    /*
     * 无返回对象(与返回给jsp页面的区别)
     */
    public void loginActivity() {
        System.out.println("in action...."+userName);
        JSONObject jsonObject=new JSONObject();
        System.out.println("in action second..."+userName);
        //JSON对象共享,但服务器和客户端导入的包不一致 这里导入的:net.sf.json.JSONObject
        if(us.loginCheck(userName, passWord)) {
            jsonObject.put("message", "欢迎"+userName+"登录!");
        }else {
            jsonObject.put("message", "非法登录!");
        }   
        try {
            response.setContentType("text/json;charset=utf-8");//设置客户端显示内容的方式
            response.setCharacterEncoding("utf-8");//网络中传输格式
            byte[] bytes=jsonObject.toString().getBytes("utf-8");
            response.setContentLength(bytes.length);
            response.getOutputStream().write(bytes);
            response.getOutputStream().flush();
            response.getOutputStream().close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }
}

2.客户端代码
AndroidManifest.xml中需要配置网络权限

<uses-permission android:name="android.permission.INTERNET"/>

布局界面如下:
这里写图片描述
登陆工具类LoginUtil.java

public class LoginUtil {
    /*
     *  http:// 代表服务器使用的是HTTP通信协议
     *  10.0.2.2 代表服务器的ip地址
     *  8080 代表服务器监听的端口号
     *  loginActivity与struts.xml中的action的name值一致
     */
    private static String URL="http://10.0.2.2:8080/服务器端的工程名/loginActivity.action?";
    public String loginToServer(String userName,String passWord) {
        //System.out.println("in loginUtil..."+userName);
        String result="";
        String strURL=URL+"userName="+userName+"&passWord="+passWord;
        HttpClient hc=new DefaultHttpClient();
        HttpPost request=new HttpPost(strURL);
        //System.out.println("in loginUtil...."+strURL);
        HttpResponse response=null;
        try {
            response=hc.execute(request);

            if(response.getStatusLine().getStatusCode()==200) {
                //System.out.println("in loginUtil..."+response.getStatusLine().getStatusCode());
                //取得服务器传来的json对象
                HttpEntity entity=response.getEntity();
                String strJson=EntityUtils.toString(entity,"utf-8");//这里仍然乱码,还要继续还原成json对象
                if(strJson!=null) {
                    //System.out.println("in loginUtil response..."+strJson);
                    //这里导入的包为org.json
                    JSONObject jsonObject=new JSONObject(strJson);
                    result=jsonObject.getString("message").toString();
                    //System.out.println("in loginUtil....result="+strURL);
                }

            }else {
                result="没有网络或服务器连接不上";
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return result;
    }
}

LoginActivity.java

public class LoginActivity extends Activity {
    EditText userNameEt,passWordEt;
    Button loginBt,cancelBt;
    String userName,passWord;
    String strResult="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        loginBt.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                userName=userNameEt.getText().toString().trim();
                passWord=passWordEt.getText().toString().trim();
                if(userName==null||userName.equals("")||
                   passWord==null||passWord.equals("")) {
                    Toast.makeText(getApplicationContext(), "输入完整的登陆信息",Toast.LENGTH_LONG).show();
                }else {
                    //访问网络要放在线程中
                    new AsyncTask<String,Void,String>(){

                        @Override
                        protected String doInBackground(String... params) {
                            //System.out.println("in asyncTask...");
                            //访问服务器端
                            LoginUtil lu=new LoginUtil();
                            strResult=lu.loginToServer(userName, passWord);                 
                            return strResult;
                        }
                        protected void onPostExecute(String strResult) {
                            //!!!!对话框一定是写在这里
                            AlertDialog.Builder bd=new Builder(LoginActivity.this);
                            bd.setTitle("对话框");
                            bd.setMessage(strResult);
                            bd.setPositiveButton("确定",null);
                            bd.create().show();
                        }
                    }.execute("");
                }
            }
        });
    }

    private void init() {
        userNameEt=(EditText)this.findViewById(R.id.et_userName);
        passWordEt=(EditText)this.findViewById(R.id.et_passWord);
        loginBt=(Button)this.findViewById(R.id.bt_ok);
        cancelBt=(Button)this.findViewById(R.id.bt_cancel);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值