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 
    <%
        }
    %>
  • 相关阅读:
    Spring Cloud Consul Config 知识点
    RabbitMQ 的 docker 镜像使用
    Spring Cloud Config 知识点
    漫画:什么是服务熔断?
    Flux 和 Mono 的区别
    同时引入依赖:spring-cloud-starter-gateway 和 spring-boot-starter-web,报错
    Feign 报错:The bean 'service-producer.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
    Feign和OpenFeign的区别
    Maven 报错:Compilation of Maven projects is supported only if external build is started from an IDE.
    使用 application.properties 中配置的属性,举例:@Value("${server.port}")
  • 原文地址:https://www.cnblogs.com/moka/p/3060765.html
Copyright © 2011-2022 走看看