在android中使用Post方式提交数据
16lz
2021-01-23
在前面的博客中介绍了在android中使用Get方式提交数据,这篇博客将介绍在android中使用Post方式提交数据到服务器,其中服务器端的代码的实现方式可以参考我的博客使用Post方式提交数据到Tomcat服务器
首先使用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.postdemo.MainActivity" android:orientation="vertical"> <EditText android:id="@+id/et_username" android:layout_width="match_parent" android:layout_height="wrap_content" 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类,并且在Util类中添加下面的代码
package com.fyt.postdemo;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.postdemo;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.view.View;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //创建消息处理器对象,用于在主线程中处理由子线程发送过来的消息 Handler handler = new Handler() { //在主线程中处理从子线程发送过来的消息 public void handleMessage(Message msg) { //获得消息中携带的数据 String data = (String) msg.obj; //使用吐司对话框提示用户登录成功还是登录失败 Toast.makeText(MainActivity.this, data, Toast.LENGTH_SHORT).show(); } }; //登录 public void login(View v) { //获得布局上的用户名输入框和密码输入框 EditText et_username = (EditText) findViewById(R.id.et_username); EditText et_passworld = (EditText) findViewById(R.id.et_password); //获得用户输入的用户名和密码 final String username = et_username.getText().toString(); final String password = et_passworld.getText().toString(); //创建子线程 Thread t = new Thread() { //运行子线程 @Override public void run() { //不检查过时的方法 @SuppressWarnings("deprecation") //设置网址 String path = "http://192.168.0.101:8080/WebProject/servlet/LoginServlet"; try { //将地址封装成Url对象 URL url = new URL(path); //创建连接对象,此时未建立连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); //设置请求方式为Post请求 conn.setRequestMethod("POST"); //设置连接超时 conn.setConnectTimeout(5000); //设置读取超时 conn.setReadTimeout(5000); //拼接出要提交的数据的字符串 String data = "username=" + URLEncoder.encode(username) + "&password=" + password; //添加post请求的两行属性 conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length", data.length() + ""); //设置打开输出流 conn.setDoOutput(true); //拿到输出流 OutputStream os = conn.getOutputStream(); //使用输出流往服务器提交数据 os.write(data.getBytes()); //如果请求发送成功 if(conn.getResponseCode() == 200) { //获得连接对象中的输入流 InputStream is = conn.getInputStream(); //获得输入流中的字符串 String text = Util.getTextFromStream(is); //创建一个消息对象 Message msg = handler.obtainMessage(); //设置消息对象携带的数据 msg.obj = text; //将消息发送到主线程的消息队列 handler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); } } }; //启动子线程 t.start(); }}
最后一步:修改配置文件
<uses-permission android:name="android.permission.INTERNET"/>
更多相关文章
- Android消息推送完美解决方案全析
- Android与服务器端数据交互
- [android 多线程]一些帖子与文章ProgressDialog, AsyncTask, Thr
- Android 数据库批量查询数据的操作
- Android中ListView分页加载数据