okhttp实现注册登录功能(与服务器端)

请求方式:POST

参数 :username,password

URL  : http://**************/register?(这个我就不贴上来了)

返回值:{status:400, msg:"注册失败", data:null}{status:200, msg:"注册成功", data:null}


       首先,注册功能的实现思路是,将EditText文本框内用户输入的数值取出,接着通过post方法将取出的值发送到服务器端对应的参数上,然后服务器会进行判断,将返回值反馈给客户端,我这里服务器上返回的是一串简单的json格式字符串,我们在将获取的返回json字符串进行解析,通过判断status值来给出提示是否注册成功(200表示成功,400表示失败);简单的json字符串解析可通过gson来解析。

       需要获得联网权限,在AndroidMainfest中配置

<uses-permission android:name="android.permission.INTERNET" />
在build.gradle(app)文件中添加okhttp和gson :
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.google.code.gson:gson:2.8.2'
将这些配置好了,直接看下面代码即可

UserBeanl类
[java]  view plain  copy
  1. public class UserBean {  
  2.     private String status;  
  3.     private  String msg;  
  4.     private String data;  
  5.    public String getStatus() {  
  6.         return status;  
  7.     }  
  8.   
  9.     public void setStatus(String status) {  
  10.         this.status = status;  
  11.     }  
  12.   
  13.     public String getMsg() {  
  14.         return msg;  
  15.     }  
  16.   
  17.     public void setMsg(String msg) {  
  18.         this.msg = msg;  
  19.     }  
  20.   
  21.     public String getData() {  
  22.         return data;  
  23.     }  
  24.   
  25.     public void setData(String data) {  
  26.         this.data = data;  
  27.     }  
  28. }  
实现的功能代码RegisterActivity
[java]  view plain  copy
  1. public class RegisterActivity extends AppCompatActivity{  
  2.     private EditText name;  
  3.     private EditText pwd;  
  4.     private String name1,pwd1;  
  5.     private Button reg;  
  6.     private List<UserBean>list;  
  7.   
  8.     final OkHttpClient client = new OkHttpClient();  
  9.   
  10.     private Handler mHandler = new Handler(){  
  11.         @Override  
  12.         public void handleMessage(Message msg){  
  13.             if(msg.what==1){  
  14.                 String ReturnMessage = (String) msg.obj;  
  15.                 Log.i("获取的返回信息",ReturnMessage);  
  16.                 final UserBean userBean = new Gson().fromJson(ReturnMessage, UserBean.class);  
  17.                 final String AA = userBean.getMsg();  
  18.                 /*** 
  19.                  * 在此处可以通过获取到的Msg值来判断 
  20.                  * 给出用户提示注册成功 与否,以及判断是否用户名已经存在 
  21.                  */  
  22.                 Log.i("MSGhahahha", AA);  
  23.             }  
  24.   
  25.         }  
  26.     };  
  27.   
  28.   
  29.   
  30.     @Override  
  31.     protected void onCreate(Bundle savedInstanceState) {  
  32.         super.onCreate(savedInstanceState);  
  33.         setContentView(R.layout.activity_main);  
  34. /** 
  35.  * 初始化 
  36.  */  
  37.         name = (EditText) findViewById(R.id.name);  
  38.         pwd = (EditText) findViewById(R.id.pwd);  
  39.         reg = (Button) findViewById(R.id.register);  
  40.   
  41.   
  42.         reg.setOnClickListener(new View.OnClickListener() {  
  43.             @Override  
  44.             public void onClick(View v) {  
  45.                 //获取相关参数  
  46.                 name1=name.getText().toString().trim();  
  47.                 pwd1=pwd.getText().toString().trim();  
  48.                 //通过okhttp发起post请求  
  49.                 postRequest(name1,pwd1);  
  50.   
  51.             }  
  52.         });  
  53.   
  54.     }  
  55.   
  56.     /** 
  57.      * post请求后台 
  58.      * @param username 
  59.      * @param password 
  60.      */  
  61.     private void postRequest(String username,String password)  {  
  62.         //建立请求表单,添加上传服务器的参数  
  63.         RequestBody formBody = new FormBody.Builder()  
  64.                 .add("username",name1)  
  65.                 .add("password",pwd1)  
  66.                 .build();  
  67.         //发起请求  
  68.         final Request request = new Request.Builder()  
  69.                 .url("http://**************/login?")  
  70.                 .post(formBody)  
  71.                 .build();  
  72.         //新建一个线程,用于得到服务器响应的参数  
  73.         new Thread(new Runnable() {  
  74.             @Override  
  75.             public void run() {  
  76.                 Response response = null;  
  77.                 try {  
  78.                     //回调  
  79.                     response = client.newCall(request).execute();  
  80.                     if (response.isSuccessful()) {  
  81.                         //将服务器响应的参数response.body().string())发送到hanlder中,并更新ui  
  82.                         mHandler.obtainMessage(1, response.body().string()).sendToTarget();  
  83.   
  84.                     } else {  
  85.                         throw new IOException("Unexpected code:" + response);  
  86.                     }  
  87.                 } catch (IOException e) {  
  88.                     e.printStackTrace();  
  89.                 }  
  90.             }  
  91.         }).start();  
  92.   
  93.     }  
  94.   
  95. }  

下面试布局代码
[html]  view plain  copy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.   
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:orientation="vertical"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     tools:context="com.example.lushuai.testregister.RegisterActivity">  
  8.   
  9.     <EditText  
  10.         android:id="@+id/name"  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="40dp"  
  13.         android:hint="账号"/>  
  14.     <EditText  
  15.         android:id="@+id/pwd"  
  16.         android:layout_width="match_parent"  
  17.         android:layout_height="40dp"  
  18.         android:hint="密码"/>  
  19.      
  20.    </LinearLayout>  

猜你喜欢

转载自blog.csdn.net/sinat_17775997/article/details/80775424