okhttp框架實現註冊登入
阿新 • • 發佈:2019-02-08
OkHttp 相較於其它的實現有以下的優點:
1. 支援SPDY,允許連線同一主機的所有請求分享一個socket。 如果SPDY不可用,會使用連線池減少請求延遲。 使用GZIP壓縮下載內容,且壓縮操作對使用者是透明的。 利用響應快取來避免重複的網路請求。 當網路出現問題的時候,OKHttp會依然有效,它將從常見的連線問題當中恢復。 如果你的服務端有多個IP地址,當第一個地址連線失敗時,OKHttp會嘗試連線其他的地址,這對IPV4和IPV6以及寄宿在多個數據中心的服務而言,是非常有必要的。
下面就是我簡單的寫的一個登入註冊的例子,供大家參考:
首先需要匯入okhttp架包:
執行介面展示:
RegisterActivity程式碼:
package wujie.com.okhttp;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import java.io.IOException;
/**
* Created by wujie on 2016/10/24.
*/
public class RegisterActivity extends Activity{
private Button reg;
private EditText name,pwd;
private String name1,pwd1;
private TextView text1;
final OkHttpClient client = new OkHttpClient();
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg){
if(msg.what==1){
String qq = (String) msg.obj;
Log.i("WUJIE", qq);
text1.setText(qq);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
/**
* 初始化資料
*/
name= (EditText) findViewById(R.id.name);
pwd= (EditText) findViewById(R.id.pwd);
reg= (Button) findViewById(R.id.register);
text1= (TextView) findViewById(R.id.textview);
/**
* 註冊按鈕監聽
*/
reg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//獲取相關引數
name1=name.getText().toString().trim();
pwd1=pwd.getText().toString().trim();
//通過okhttp發起post請求
postRequest(name1,pwd1);
}
});
}
/**
* post請求後臺
* @param name
* @param pwd
*/
private void postRequest(String name,String pwd) {
//建立請求表單,新增上傳伺服器的引數
RequestBody formBody = new FormEncodingBuilder()
.add("name",name)
.add("pwd",pwd)
.add("method","okhttpreg")
.build();
//發起請求
final Request request = new Request.Builder()
.url("http://192.168.1.101:8080/Ai/LoginServlet")
.post(formBody)
.build();
//新建一個執行緒,用於得到伺服器響應的引數
new Thread(new Runnable() {
@Override
public void run() {
Response response = null;
try {
//回撥
response = client.newCall(request).execute();
if (response.isSuccessful()) {
//將伺服器響應的引數response.body().string())傳送到hanlder中,並更新ui
mHandler.obtainMessage(1, response.body().string()).sendToTarget();
} else {
throw new IOException("Unexpected code:" + response);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
佈局檔案register.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/name"
android:hint="使用者名稱"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/pwd"
android:hint="密碼"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/register"
android:text="註冊"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textview"
android:textColor="#ff0000"
android:textSize="18sp"
android:paddingTop="10dp"/>
</LinearLayout>
網路許可權:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
服務端介面程式碼,由於時間過得比較久了,以前的程式碼找不到了,本人就重新寫了一個註冊的介面,供大家參考
謝謝大家的支援!