Android中使用http實現註冊登入
阿新 • • 發佈:2019-02-15
在專案中實現註冊登入有很多種方式,一般對於初學者來說,不使用框架,採用http的post和get請求後臺伺服器,是一種更好理解底層原始碼的方式。使用框架實現註冊登入雖然比自己封裝post和get請求後臺方便,但是不利於我們更好地理解其中的原理和機制。
實現的步驟大致分為以下幾點:
1. 建立HttpPost物件,並將伺服器介面地址url設定好。
2. 利用NameValuePair類設定相關引數,並將NameValuePair放入到list集合中。
3. 發起post請求獲取返回例項HttpResponse。
4. 使用EntityUtils對返回值的實體進行處理(可以取得返回的字串,也可以取得返回的byte陣列),一般在伺服器返回的都是json字串。
注意事項:
- 在主執行緒中不能直接訪問網路,要開闢子執行緒。
- 在子執行緒中不能直接更新ui。
MainActivity:
package wujie.com.myapplication11;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private String url="http://192.168.1.101:8080/SHproject/homepage/register";//伺服器介面地址
private EditText name,pwd;//使用者名稱和密碼
private Button submit;//提交按鈕
private TextView result;//伺服器返回結果
//Handler用於接收服務端返回的資料更新ui
private Handler hanlder=new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
String qq= (String) msg.obj;
result.setText("伺服器返回: " + qq);
break;
}
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化資料
name= (EditText) findViewById(R.id.name);
pwd= (EditText) findViewById(R.id.pwd);
submit= (Button) findViewById(R.id.submit);
result= (TextView) findViewById(R.id.result);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
* 開闢一個子執行緒訪問網路,否則會丟擲異常
*/
new Thread() {
@Override
public void run() {
String name1=name.getText().toString().trim();
String pwd1=pwd.getText().toString().trim();
NameValuePair pair1 = new BasicNameValuePair("name", name1);
NameValuePair pair2 = new BasicNameValuePair("password", pwd1);
List<NameValuePair> pairList = new ArrayList<NameValuePair>();
pairList.add(pair1);
pairList.add(pair2);
try
{
HttpEntity requestHttpEntity = new UrlEncodedFormEntity(
pairList);
// URl是介面地址
HttpPost httpPost = new HttpPost(url);
// 將請求體內容加入請求中
httpPost.setEntity(requestHttpEntity);
// 需要客戶端物件來發送請求
HttpClient httpClient = new DefaultHttpClient();
// 傳送請求
HttpResponse response = httpClient.execute(httpPost);
// 顯示響應
showResponseResult(response);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}.start();
}
});
}
/**
* 顯示響應結果到命令列和TextView
* @param response
*/
private void showResponseResult(HttpResponse response)
{
if (null == response)
{
return;
}
HttpEntity httpEntity = response.getEntity();
try
{
InputStream inputStream = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream));
String result1 = "";
String line = "";
while (null != (line = reader.readLine()))
{
result1 += line;
}
System.out.println(result1);
/**
* 把伺服器返回的結果 傳送到hanlder中,在子執行緒中是不允許更新ui的
*/
hanlder.obtainMessage(0,result1).sendToTarget();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
佈局檔案:
<?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="wujie.com.myapplication11.MainActivity"
android:orientation="vertical">
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="使用者名稱"
/>
<EditText
android:id="@+id/pwd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="密碼"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/submit"
android:text="提交"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/result"
android:textColor="#ff0000"
android:textSize="20sp"
android:paddingTop="18dp"/>
</LinearLayout>
執行截圖:
網路許可權:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>