zoukankan      html  css  js  c++  java
  • Android网络编程之与Tomcat Server的连接(Get & Post)

    本片利用局域网中另一台电脑启动Tomcat Server,然后用Android手机采取Get和Post两种方式进行连接

    首先,任何涉及网络的操作都要获取网络操作权限,在AndroidManifest.xml中添加如下权限

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

    Get方式的一般流程是:

    写好带参数的url ---> 地址重写 ---> 获取该url的HttpURLConnection ---> 准备字节数组 ---> 获取HttpURLConnection的输入流并读入字节数组中 ---> 其他组数据操作

    public class MainActivity extends Activity {
        
        private EditText idText = null;
        private EditText pwText = null;
        private TextView infoText = null;
        private Button connectBtn = null;
        
        private boolean flag = false;
        
        @SuppressLint("NewApi")
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            
            /*下面两段代码使Android3.0以上系统可以让http代码使用主UI线程,因为3.0以上系统对UI资源的使用更严格*/
            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
            .detectDiskReads().detectDiskWrites().detectNetwork()  
            .penaltyLog().build());  
    
            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
            .detectLeakedSqlLiteObjects().penaltyLog()
            .penaltyDeath().build());  
            
            idText = (EditText) findViewById(R.id.idText);
            pwText = (EditText) findViewById(R.id.pwText);
            infoText = (TextView) findViewById(R.id.infoText);
            connectBtn = (Button) findViewById(R.id.connectBtn);
            
            connectBtn.setOnClickListener(new ConnectBtnListener());
            // http://172.16.1.201:8080/androidweb/
            
            // Get请求,地址重写方式
            try {
                URL url = new URL("http", "172.16.1.210", 8080, 
                        "/androidweb/android.jsp?id=shuai&password=shuai");
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                
                byte data[] = new byte[512];
                int len = conn.getInputStream().read(data); // 输入流读取
                if (len > 0) {    // 已经读取到内容
                    String temp = new String(data, 0, len).trim();
                    flag = Boolean.parseBoolean(temp) ;    // 取出里面的boolean型数据
                }
                conn.getInputStream().close() ;
            } catch (MalformedURLException e) {
                this.infoText.setText("服务器连接失败!");
            } catch (IOException e) {
                this.infoText.setText("IO错误!");
            }
            
            if (flag) {
                this.infoText.setText("用户连接成功!");
            } else {
                this.infoText.setText("用户连接失败!");
            }
            
            
        }

    Post方式的一般流程是:

    实例化HttpPost请求,参数为url ---> 准备参数列表 ---> 向列表中添加参数 ---> 设置post请求实体,即为向请求中添加参数和编码 ---> 执行请求,获得服务器响应 ---> 判断响应头文件的状态码 ---> 获取响应实体对象,提取信息

        private class ConnectBtnListener implements OnClickListener {
    
            @Override
            public void onClick(View v) {
                 //Post请求
                HttpPost postRequest = new HttpPost(urlString);
                
                //准备参数列表,泛型为基本键值对
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                
                // 添加参数
                params.add(new BasicNameValuePair("id", MainActivity.this.idText.getText().toString()));
                params.add(new BasicNameValuePair("password", MainActivity.this.pwText.getText().toString()));
                
                
                try {
                    // 设置post请求实体,即为向请求中添加参数和编码
                    postRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
                    // 执行请求,获得服务器响应
                    HttpResponse response = new DefaultHttpClient().execute(postRequest);
                    // 判断响应头文件的状态码
                    if (response.getStatusLine().getStatusCode() == 200) {
                        // 获取响应实体对象,提取信息
                        MainActivity.this.flag = Boolean.parseBoolean(EntityUtils.toString(response.getEntity()).trim());
                    }
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (ClientProtocolException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                
                if (MainActivity.this.flag) {
                    MainActivity.this.infoText.setText("用户连接成功!");
                } else {
                    MainActivity.this.infoText.setText("用户连接失败!");
                }
            }
        }
        
    }

    下面是服务器端jsp文件:

    <%    
        String id = request.getParameter("id") ;
        String password = request.getParameter("password") ;
    %>
    <%
        if ("shuai".equals(id) && "shuai".equals(password)) {
    %>
            true 
    <%
        } else {
    %>
            false 
    <%
        }
    %>
  • 相关阅读:
    教程:在 Visual Studio 中开始使用 Flask Web 框架
    教程:Visual Studio 中的 Django Web 框架入门
    vs2017下发现解决python运行出现‘No module named "XXX""的解决办法
    《sqlite权威指南》读书笔记 (一)
    SQL Server手工插入标识列
    hdu 3729 I'm Telling the Truth 二分图匹配
    HDU 3065 AC自动机 裸题
    hdu 3720 Arranging Your Team 枚举
    virtualbox 虚拟3台虚拟机搭建hadoop集群
    sqlserver 数据行统计,秒查语句
  • 原文地址:https://www.cnblogs.com/moka/p/3060765.html
Copyright © 2011-2022 走看看