android 后台数据获取,android post方式给后台服务器传递数据
请求方式GET和POST的简单分别:get方式是把参数附加到URL地址后面,如:post是将请求参数放到请求体中,以流的方式传到服务器,另外上传文件时,一定是post方式下面的代码是用post方式模拟用户登录packagecom.yuanlp.qqloginpost;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatA...
请求方式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();
}
}
});
}
}
更多推荐
所有评论(0)