Android客户端向服务器端发送数据的流程(1)
原理:
android客户端通过使用org.apache.http.impl.client.DefaultHttpClient类来发送数据;
方法介绍:
HttpClient是android中提供的一个类 , 也是apache开源组织提供的项目 , 他是个简单的HTTP客户端, 而不是一个浏览器 , 可以用于发送HTTP请求,接受http响应.但是不会缓存服务器的响应,不能执行html中in个内嵌的JS代码,也不会对页面的额内容进行任何的解析和处理;
这句话的意思就是:如果你请求的页面内容是:
<HTML>
<BODY>
<br/>
</BODY>
</HTML>的话 , 他是
一个请求的发送大致可以分为:
step1 创建HttpClient对象 详情请看代码中标识的1.1- 1.2 1.3
step2 创建POST请求的对象---HttpPost
step3 为HttpPost对象中放入参数--setParams(HttpParams ) 或者是setEntity(HttpEntity)
step4 通过HttpClient.exec(HttpPost)方法会返回一个HttpResponse对象 ; 这个对象中提供有获取服务器的响应头,获取服务器的响应内容等等
------------------>>>
Demo:
1 package com.creazy.demohttpclient; 2 3 import android.app.Activity; 4 import android.app.AlertDialog; 5 import android.content.DialogInterface; 6 import android.os.Looper; 7 import android.support.v7.app.AppCompatActivity; 8 import android.os.Bundle; 9 import android.view.Menu; 10 import android.view.MenuItem; 11 import android.view.View; 12 import android.widget.Button; 13 import android.widget.EditText; 14 import android.widget.TextView; 15 import android.widget.Toast; 16 17 import org.apache.http.HttpResponse; 18 import org.apache.http.NameValuePair; 19 import org.apache.http.client.HttpClient; 20 import org.apache.http.client.entity.UrlEncodedFormEntity; 21 import org.apache.http.client.methods.HttpPost; 22 import org.apache.http.impl.client.DefaultHttpClient; 23 import org.apache.http.message.BasicNameValuePair; 24 import org.apache.http.protocol.HTTP; 25 import org.apache.http.util.EntityUtils; 26 27 import java.io.IOException; 28 import java.io.UnsupportedEncodingException; 29 import java.util.ArrayList; 30 import java.util.List; 31 32 public class MainActivity extends Activity 33 { 34 35 private Button btn_login; 36 private Button btn_reg; 37 38 private HttpClient httpClient //init ...初始化成员变量<1.2> 39 this.btn_login = (Button)findViewById(R.id.login); 40 this.btn_reg = (Button)findViewById(R.id.regiser); 41 42 this.httpClient = new DefaultHttpClient() //load login View 43 final View loginDialog = getLayoutInflater().inflate(R.layout.login_layout , null ); 44 AlertDialog.Builder bud = new AlertDialog.Builder(MainActivity.this); 45 bud.setTitle("login"); 46 bud.setView(loginDialog); 47 bud.setPositiveButton("ok", new DialogInterface.OnClickListener() { 48 @Override 49 public void onClick(DialogInterface dialogInterface, int i) { 50 //get user info 51 final String name = ((EditText) loginDialog.findViewById(R.id.user)).getText().toString(); 52 final String pass = ((EditText) loginDialog.findViewById(R.id.passed)).getText().toString(); 53 54 55 new Thread() { 56 @Override 57 public void run() { 58 super.run(); 59 String url = "http://192.168.1.101:8080/DemoLogin/LoginServlet"; 60 Step2,这个对象中含有请求的URL 61 params.add(new BasicNameValuePair("pass", pass)); 62 63 try { 64 //设置请求参数 65 Step3.( response.getEntity bud.show(); 66 67 68 69 } 70 71 72 public void showRegister(View v) 73 { 74 /** 75 注册页面的代码省略 76 **/ 77 78 } 79 }
====================================================================================
如图: 这是在浏览器中访问的数据结果:
android 客户端:
不输入任何用户信息
=============================>此时 发现android中的Toast显示的数据 和反问浏览器时的数据一致 说明: 我们这条道路走通了
我心匪石,不可转也。我心匪席,不可卷也。