您的位置:首页 > 移动开发 > Android开发

在android中使用Post方式提交数据

2016-04-21 11:04 387 查看
在前面的博客中介绍了在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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: