请求方式GET和POST的简单分别:

get方式是把参数附加到URL地址后面,如:

post是将请求参数放到请求体中,以流的方式传到服务器,另外上传文件时,一定是post方式

下面的代码是用post方式模拟用户登录package com.yuanlp.qqloginpost;

import android.os.Bundle;

import android.support.v7.app.AppCompatActivity;

import android.text.TextUtils;

import android.view.View;

import android.widget.Button;

import android.widget.CheckBox;

import android.widget.EditText;

import android.widget.Toast;

import org.json.JSONException;

import org.json.JSONObject;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.net.URLEncoder;

public class MainActivity extends AppCompatActivity {

private static final int LOAD_SUCCESS =1 ;

private static final int LOAD_ERROR =2 ;

private EditText mQqNum;

private EditText mQqPwd;

private CheckBox mCb_rember;

private Button sub;

private String mQq;

private String mPwd;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mQqNum= (EditText) findViewById(R.id.et_qqNum);

mQqPwd = (EditText) findViewById(R.id.et_pwd);

mCb_rember = (CheckBox) findViewById(R.id.cb_rember);

sub = (Button) findViewById(R.id.bt_sub);

}

/**

* 按钮对应的点击方法

* @param view

*/

public void login(View view){

//Toast.makeText(this,"点击了提交",Toast.LENGTH_SHORT).show();

mQq = mQqNum.getText().toString().trim();

mPwd = mQqPwd.getText().toString().trim();

//mCb_rember.getText().toString().trim();

if (TextUtils.isEmpty(mQq)||TextUtils.isEmpty(mPwd)){

Toast.makeText(this,"QQ号码或者密码为空",Toast.LENGTH_SHORT).show();

return;

}

//这里设置按钮不能点,应为一直点,就一直发送请求,会造成一直请求数据

sub.setEnabled(false);

/**

* 点击按钮事件,在主线程中开启一个子线程进行网络请求

* (因为在4.0只有不支持主线程进行网络请求,所以一般情况下,建议另开启子线程进行网络请求等耗时操作)。

*/

//请求网络

new Thread(){

@Override

public void run() {

try {

Thread.sleep(5000);

String path="http://192.168.1.111:10010/aos/pdaLogin.jhtml";

URL url = new URL(path);

//打开httpurlconnection

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("POST");              //设置get方式获取数据

conn.setConnectTimeout(5000);              //设置连接超时时间5秒

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  //如果设置方式为post,则必须制定该属性

//将数据进行编码,然后会自动的将该数据放到post中传到后台

String data="username="+ URLEncoder.encode(mQq,"utf-8")+"&password="+URLEncoder.encode(mPwd,"utf-8");

//指定长度

conn.setRequestProperty("Content-length",String.valueOf(data.length()));

/**

* post是以流的方式写给服务器

*/

conn.setDoOutput(true); //指定输出模式

conn.getOutputStream().write(data.getBytes());  //将要传递的数据写入输出流

int code = conn.getResponseCode();         // 获取response状态,200表示成功获取资源,404表示资源不存在

if (code==200){

InputStream is=conn.getInputStream();

BufferedReader br=new BufferedReader(new InputStreamReader(is));

StringBuffer sb=new StringBuffer();

String len=null;

while((len=br.readLine())!=null){

sb.append(len);

}

String result=sb.toString();

/**

* 这里就不用handler方式来处理子线程的数据了

*/

runToastAnyThread(result);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}.start();

}

/**

* 在任何线程中都可以弹出吐司

* @param result

*/

private void runToastAnyThread(final String result) {

/**

* 在这个run方法里写的任何方法都是在UI线程中执行

*/

runOnUiThread(new Runnable() {

@Override

public void run() {

JSONObject jsonObject=null;

try {

jsonObject=new JSONObject(result);

String code=jsonObject.get("appcode").toString();

if ("0".equals(code)){

Toast.makeText(getApplicationContext(),"登录失败",Toast.LENGTH_SHORT).show();

}else if("1".equals(code)){

Toast.makeText(getApplicationContext(),"登录成功",Toast.LENGTH_SHORT).show();

}

sub.setEnabled(true);

} catch (JSONException e) {

e.printStackTrace();

}

}

});

}

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐