在android中使用Get方式提交数据
16lz
2021-01-26
在前面的博客中分别介绍了在浏览器中使用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>
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"/>
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- 一句话锁定MySQL数据占用元凶
- Android实训案例(九)——答题系统的思绪,自己设计一个题库的体验,一
- Android如何正确的保存文件
- 简单轻松!通过USB数据线,让Android(安卓)Studio连接到自己的安卓手
- 如何实现服务器给android客户端主动推送消息
- Android高仿微信之mvp实现(二)
- 【Android归纳】阿里笔试题之Android网络优化
- 浅析android适配器adapter中的那些坑