在前面的博客中分别介绍了在浏览器中使用Get和Post两种方式发送数据到Tomcat服务器,这篇博客将介绍在android中使用Get方式向服务器发送数据,其中服务器端用的就是前面篇博客中介绍的那个服务器,所以这篇博客主要介绍android客户端实现方式

在介绍实现代码前,先看一下我们要实现的效果

当用户名和密码都输入正确时,会弹出登录成功的吐司对话框



当用户名或密码中有一个输入错误则会弹出登录失败的对话框



实现方式

第一步:使用Android Studio创建一个Android工程,修改activity_main.xml中的布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.fyt.getlogindemo.MainActivity"    android:orientation="vertical">    <EditText        android:id="@+id/et_username"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text=""        android:hint="请输入您的用户名"/>    <EditText        android:id="@+id/et_password"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:inputType="numberPassword"        android:hint="请输入您的密码"/>    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="登录"        android:onClick="login"/></LinearLayout>


第二步:新建一个Util类,作为一个工具类,用于实现一些常用的方法

package com.fyt.getlogindemo;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;//创建一个通用类public class Util {    //从流中获得文本    public static String getTextFromStream(InputStream is){        //创建字节数组        byte[] b = new byte[1024];        //创建整型变量len,用于记录文本的长度        int len = 0;        //创建字节数组输出流,读取输入流的文本数据时,同步把数据写入数组输出流        ByteArrayOutputStream bos = new ByteArrayOutputStream();        try {            //将读取到的数据写入字节数组输出流            while((len = is.read(b)) != -1)            {                bos.write(b, 0, len);            }            //把字节数组输出流里的数据转换成字符串            String text = new String(bos.toByteArray());            //返回字符串            return text;        } catch (IOException e) {            e.printStackTrace();        }        //当读取出现异常,则返回null        return null;    }}

第三步:修改MainActivity.java中的代码

package com.fyt.getlogindemo;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.EditText;import android.widget.Toast;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;public class MainActivity extends Activity {    //用于获取输入框中的用户名和密码    private EditText et_username;    private EditText et_password;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获得布局上的用户名输入框和密码输入框        et_username = (EditText) findViewById(R.id.et_username);        et_password = (EditText) findViewById(R.id.et_password);    }    //创建Handler对象,用于在主线程中接收并处理由子线程    //发送过来的消息    Handler handler = new Handler() {        //在主线程中处理由子线程发送过来的消息        public void handleMessage(android.os.Message msg) {            //获得消息中携带的数据            //消息携带的是用户是否登录成功的信息            String text = (String) msg.obj;            //创建吐司对话框,提示用户是否登录成功            Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();        }    };    //登录    public void login(View view) {        //获得用户输入的用户名和密码        String username = et_username.getText().toString();        String password = et_password.getText().toString();        //设置地址        //提交的数据需要经过Url编码,英文和数字编码后不变        final String path = "http://192.168.0.101:8080/WebProject/servlet/LoginServlet" +                "?username=" + URLEncoder.encode(username) + "&" + "password=" + password;        Log.d("MainActivity", path);        //创建一个子线程        Thread thread = new Thread() {            //执行子线程            @Override            public void run() {                try {                    //将地址封装成Url                    URL url = new URL(path);                    Log.d("MainActivity", "Url");                    //获取连接对象,此时未建立连接                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    Log.d("MainActivity", "Connection");                    //设置请求方式为Get请求                    conn.setRequestMethod("GET");                    Log.d("MainActivity", "Get");                    //设置连接超时                    conn.setConnectTimeout(5000);                    Log.d("MainActivity", "Timeout1");                    //设置读取超时                    conn.setReadTimeout(5000);                    Log.d("MainActivity", "Timeout2");                    int code = conn.getResponseCode();                    Log.d("MainActivity", "code=" + code);                    //如果请求成功                    if(conn.getResponseCode() == 200) {                        //获得输入流                        InputStream is = conn.getInputStream();                        Log.d("MainActivity", "InputStream");                        //获得输入流中的文本                        String text = Util.getTextFromStream(is);                        //创建消息对象                        Message message = handler.obtainMessage();                        //实现消息对象携带的数据                        message.obj = text;                        //将消息发送到主线程的消息队列                        handler.sendMessage(message);                    }                } catch (Exception e) {                    e.printStackTrace();                }            }        };        //启动子线程        thread.start();    }}

最后一步:在配置文件中添加一条访问网络的权限

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

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一
  4. Android如何正确的保存文件
  5. 简单轻松!通过USB数据线,让Android(安卓)Studio连接到自己的安卓手
  6. 如何实现服务器给android客户端主动推送消息
  7. Android高仿微信之mvp实现(二)
  8. 【Android归纳】阿里笔试题之Android网络优化
  9. 浅析android适配器adapter中的那些坑

随机推荐

  1. Android与WebView本地上传图片问题
  2. android studio+grade配置构建
  3. (源码)200多种Android动画效果的强悍框架、
  4. android手机使用tcpdump抓包经验
  5. Android实现系统级屏幕录制(下)
  6. java后台程序员转android 之《三B》 支付
  7. Android 系列 6.30将具有圆角的边框添加
  8. 《Android 插件化框架VirtualAPK :(一)基本
  9. Android客户端多文件上传
  10. Android(安卓)webview控件(一) 使用webview