Browse Source

为注册添加短信手机号码验证

Junqin Wang 8 years ago
parent
commit
74ced92054

+ 2 - 0
app/AndroidManifest.xml

@@ -80,6 +80,8 @@
             </intent-filter>
         </activity>
 
+        <!--注册界面-->
+        <activity android:name=".login.RegisterActivity" />
 
         <!-- 导航页 -->
         <activity

+ 7 - 15
app/app.iml

@@ -59,13 +59,6 @@
       <sourceFolder url="file://$MODULE_DIR$/assets" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -73,6 +66,13 @@
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
@@ -139,13 +139,5 @@
     <orderEntry type="library" exported="" name="support-compat-25.3.1" level="project" />
     <orderEntry type="library" exported="" name="animated-vector-drawable-25.3.1" level="project" />
     <orderEntry type="module" module-name="uikit" exported="" />
-    <orderEntry type="library" exported="" name="java-json" level="project" />
-    <orderEntry type="library" exported="" name="renderscript-v8" level="project" />
-    <orderEntry type="library" exported="" name="glide-3.7.0" level="project" />
-    <orderEntry type="library" exported="" name="nim-avchat-4.0.0" level="project" />
-    <orderEntry type="library" exported="" name="constraint-layout-solver-1.0.2" level="project" />
-    <orderEntry type="library" exported="" name="nim-basesdk-4.0.0" level="project" />
-    <orderEntry type="library" exported="" name="fastjson-1.1.34.android" level="project" />
-    <orderEntry type="library" exported="" name="nim-lucene-4.0.0" level="project" />
   </component>
 </module>

+ 6 - 0
app/res/drawable/style_rounded_corner_editext.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="8dp"/>
+    <stroke android:color="@color/color_grey_555555"
+        android:width="1dp"/>
+</shape>

File diff suppressed because it is too large
+ 0 - 92
app/res/layout/register_layout.xml


+ 2 - 1
app/src/com/sheishuo/app/common/util/net/NetInfo.java

@@ -7,10 +7,11 @@ package com.sheishuo.app.common.util.net;
 public class NetInfo {
     public final static String INDEX = "http://whosay.dashgame.com/index.php/";
     public final static String LOGIN_URL = INDEX + "?m=who&c=index&a=login";
-    public final static String REG_URL = INDEX + "?m=who&c=index&a=login";
+    public final static String REG_URL = INDEX + "?m=who&c=index&a=register";
     public final static String GET_NEARBY_GROUP = INDEX + "?m=who&c=index&a=near_room";
     public final static String CIRCLE_LIST = INDEX + "?m=who&c=social&a=lists";
     public final static String CIRCLE_USER_LIKED = INDEX + "?m=who&c=social&a=like";
     public final static String NEW_TWEETING = INDEX + "?m=who&c=social&a=publish";
     public final static String GIFT_LIST = INDEX + "?m=who&c=index&a=gift_list";
+    public final static String GET_CODE = INDEX + "?m=who&c=index&a=send_code";
 }

+ 6 - 0
app/src/com/sheishuo/app/common/views/BaseToolbar.java

@@ -1,6 +1,7 @@
 package com.sheishuo.app.common.views;
 
 import android.content.Context;
+import android.support.annotation.ColorInt;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.Toolbar;
 import android.util.AttributeSet;
@@ -81,6 +82,8 @@ public class BaseToolbar extends Toolbar {
         this.setLogo(null);
     }
 
+
+
     public void setTitle(String title){
         getTitleTV().setText(title);
         titleTV.setVisibility(VISIBLE);
@@ -98,4 +101,7 @@ public class BaseToolbar extends Toolbar {
 
     }
 
+
+
+
 }

+ 2 - 0
app/src/com/sheishuo/app/login/LoginAndRegActivity.java

@@ -72,6 +72,8 @@ public class LoginAndRegActivity extends SheishuoUI implements View.OnClickListe
                 LoginActivity.start(context);
                 break;
             case R.id.btn_register:
+                Log.e(TAG,"registerBtn");
+                RegisterActivity.start(context);
                 break;
             default:
                 break;

+ 249 - 2
app/src/com/sheishuo/app/login/RegisterActivity.java

@@ -2,20 +2,267 @@ package com.sheishuo.app.login;
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.support.annotation.Nullable;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
 
+import com.sheishuo.app.R;
+import com.sheishuo.app.common.util.net.INet;
+import com.sheishuo.app.common.util.net.NetImpl;
+import com.sheishuo.app.common.util.net.NetInfo;
+import com.sheishuo.app.common.util.net.ResponseCallback;
+import com.sheishuo.app.common.views.BaseToolbar;
 import com.sheishuo.app.uikit_implements.SheishuoUI;
 
+import org.json.JSONObject;
+
+import okhttp3.FormBody;
+
 
 /**
  * Created by KN on 2017/7/11.
  */
 
-public class RegisterActivity extends SheishuoUI {
+public class RegisterActivity extends SheishuoUI implements View.OnClickListener {
+
+    private String TAG = this.getClass().getSimpleName();
+    private Context context = this;
+    private EditText telET, codeET, pwdET, pwdConfirmET;
+    private TextView getCodeTV;
+    private Button registerBtn;
+    private BaseToolbar toolbar;
+    private JSONObject code;
+    private String msgCode;
+    private Handler handler;
+    private INet net = new NetImpl();
+
+    private int countDown = 60;
+
+
     public static void start(Context context) {
-        Intent intent = new Intent(context, LoginActivity.class);
+        Intent intent = new Intent(context, RegisterActivity.class);
         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
         context.startActivity(intent);
     }
 
 
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.register_layout);
+        findViews();
+        init();
+    }
+
+
+    private void findViews() {
+        telET = $(R.id.register_tel);
+        codeET = $(R.id.register_code);
+        pwdET = $(R.id.register_password);
+        pwdConfirmET = $(R.id.register_confirm_password);
+        getCodeTV = $(R.id.register_get_code);
+        registerBtn = $(R.id.register_btn);
+        toolbar = $(R.id.toolbar);
+    }
+
+    private void init() {
+        toolbar.setTitle("注册");
+
+        getCodeTV.setOnClickListener(this);
+        registerBtn.setOnClickListener(this);
+
+        handler = new Handler(){
+            @Override
+            public void handleMessage(Message msg) {
+                super.handleMessage(msg);
+                switch (msg.what){
+                    case 0:
+                        countDown--;
+                        if (countDown > 0) {
+                            getCodeTV.setText(countDown + "s后重发");
+                            msg = handler.obtainMessage();
+                            msg.what = 0;
+                            handler.sendMessageDelayed(msg,1000);
+                        }else {
+                            countDown = 60;
+                            getCodeTV.setEnabled(true);
+                            getCodeTV.setText("获取验证码");
+
+                        }
+                        break;
+                }
+            }
+        };
+    }
+
+
+    private <T extends View> T $(int resId) {
+        return (T) findViewById(resId);
+    }
+
+    public void showToast(final String toast) {
+        handler.post(new Runnable() {
+            @Override
+            public void run() {
+                Toast.makeText(context, toast, Toast.LENGTH_SHORT).show();
+            }
+        });
+    }
+
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case R.id.register_get_code:
+                getCode();
+                break;
+            case R.id.register_btn:
+                register();
+                break;
+        }
+    }
+
+
+    //获取验证码
+    void getCode() {
+        showToast("已发送验证码,请注意查收");
+
+        startCountDown();
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                FormBody body = new FormBody.Builder()
+                        .add("mobile", telET.getText().toString())
+                        .build();
+                net.post(NetInfo.GET_CODE, body, new ResponseCallback() {
+                    @Override
+                    public void onSuccess(Object object) {
+                        String result = (String) object;
+                        try {
+                            code = new JSONObject(result);
+                            String codeData = code.getString("d");
+
+                            JSONObject dataResult = new JSONObject(codeData);
+                            if (200 == dataResult.getInt("code")) {
+                                msgCode = dataResult.getString("obj");
+                            } else {
+                                showToast("获取验证码失败");
+                            }
+
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            showToast("获取验证码失败");
+                        }
+
+                    }
+
+                    @Override
+                    public void onFailed() {
+
+                    }
+                });
+            }
+        }).start();
+    }
+
+    //验证码倒计时
+    void startCountDown() {
+        getCodeTV.setEnabled(false);
+        handler.sendEmptyMessage(0);
+    }
+
+    //注册
+    void register() {
+        String tel = telET.getText().toString().trim();
+        String code = codeET.getText().toString().trim();
+        String pwd = pwdET.getText().toString().trim();
+        String pwdConfirm = pwdConfirmET.getText().toString().trim();
+
+        if (tel.isEmpty() || code.isEmpty() || pwd.isEmpty() || pwdConfirm.isEmpty()) {
+            showToast("请将信息填写完整后注册");
+        } else if (!pwd.equals(pwdConfirm)) {
+            showToast("两次密码不一致");
+        } else {
+            registerBtn.setEnabled(false);
+            registerBtn.setText("注册中...");
+            new RegThread().start();
+        }
+
+    }
+
+    //注册成功
+    void registerSuccess() {
+        handler.post(new Runnable() {
+            @Override
+            public void run() {
+                showToast("注册成功");
+                LoginActivity.start(context);
+            }
+        });
+    }
+
+
+    //注册失败
+    void registerFailed(@Nullable String failedMsg) {
+        if (failedMsg == null) failedMsg = "";
+        final String finalFailedMsg = failedMsg;
+        handler.post(new Runnable() {
+            @Override
+            public void run() {
+                showToast("注册失败: " + finalFailedMsg);
+                registerBtn.setEnabled(true);
+                registerBtn.setText("注册");
+            }
+        });
+    }
+
+
+    //注册线程
+    private class RegThread extends Thread {
+        @Override
+        public void run() {
+            super.run();
+            String tel = telET.getText().toString().trim();
+            String code = codeET.getText().toString().trim();
+            String pwd = pwdET.getText().toString().trim();
+
+            FormBody body = new FormBody.Builder()
+                    .add("mobile", tel)
+                    .add("pwd", pwd)
+                    .add("code", code)
+                    .build();
+
+            net.post(NetInfo.REG_URL, body, new ResponseCallback() {
+                @Override
+                public void onSuccess(Object object) {
+                    try {
+                        String result = (String) object;
+                        JSONObject jsonObject = new JSONObject(result);
+                        if (0 == jsonObject.getInt("c")) {
+                            registerSuccess();
+                        } else {
+                            registerFailed(jsonObject.getString("d"));
+                        }
+
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        this.onFailed();
+                    }
+                }
+
+                @Override
+                public void onFailed() {
+                    registerFailed(null);
+                }
+            });
+        }
+    }
+
+
 }

+ 12 - 10
app/src/com/sheishuo/app/main/fragment/AreaGroupsFragment.java

@@ -87,17 +87,19 @@ public class AreaGroupsFragment extends MainTabFragment {
     //加载群组信息
     void loadGroups(){
         List<String> groupIds = new ArrayList<>();
-        groupIds.add(AccountCache.getAccount().getCountry_room_id());
-        groupIds.add(AccountCache.getAccount().getProvince_room_id());
-        groupIds.add(AccountCache.getAccount().getCity_room_id());
-        groupIds.add(AccountCache.getAccount().getDistrict_room_id());
-
-        //去除重复的id
-        if (groupIds.get(1).equals(groupIds.get(2)))groupIds.remove(2);
-        //去除空的id
-        for (int i = 0;i<groupIds.size();i++){
-            if (groupIds.get(i).isEmpty())groupIds.remove(i);
+        List<String> tempList = new ArrayList<>();
+        tempList.add(AccountCache.getAccount().getCountry_room_id());
+        tempList.add(AccountCache.getAccount().getProvince_room_id());
+        tempList.add(AccountCache.getAccount().getCity_room_id());
+        tempList.add(AccountCache.getAccount().getDistrict_room_id());
+
+
+        //去除空的和重复的id
+        for (int i = 0;i<tempList.size();i++){
+            if (!groupIds.contains(tempList.get(i)) && !tempList.get(i).isEmpty())
+                groupIds.add(tempList.get(i));
         }
+
         areaGroupsAdapter = new AreaGroupsAdapter(getActivity(),groupIds);
 
         areaGroupsRecyclerview.setAdapter(areaGroupsAdapter);

+ 1 - 1
uikit/res/layout/gift_item.xml

@@ -3,7 +3,7 @@
     android:id="@+id/gift_item_layout"
     android:orientation="vertical" android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:padding="16dp">
+    android:padding="8dp">
     <ImageView
         android:id="@+id/gift_item_img"
         android:layout_width="64dp"

+ 0 - 1
uikit/src/com/netease/nim/uikit/session/extension/GiftAttachment.java

@@ -1,6 +1,5 @@
 package com.netease.nim.uikit.session.extension;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 
 /**

+ 0 - 1
uikit/src/com/netease/nim/uikit/session/module/gift/GiftItemAdapter.java

@@ -27,7 +27,6 @@ public class GiftItemAdapter extends  RecyclerView.Adapter<GiftItemAdapter.GiftI
 
     private UIKitCache.GiftBean giftList;
     private Context context;
-    private String selectedId;
     private OnGiftCheckedListener listener;
     private Map<UIKitCache.GiftBean.ListBean,String>isCheckedMap = new HashMap<>();
 

+ 32 - 3
uikit/src/com/netease/nim/uikit/session/viewholder/MsgViewHolderGift.java

@@ -10,7 +10,12 @@ import com.netease.nim.uikit.UIKitCache;
 import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter;
 import com.netease.nim.uikit.session.extension.GiftAttachment;
 import com.netease.nimlib.sdk.NIMClient;
+import com.netease.nimlib.sdk.RequestCallback;
 import com.netease.nimlib.sdk.uinfo.UserService;
+import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
+
+import java.util.ArrayList;
+import java.util.List;
 
 
 /**
@@ -51,11 +56,35 @@ public class MsgViewHolderGift extends MsgViewHolderBase {
 
 
     private String getName(String Id){
-        String name = NIMClient.getService(UserService.class).getUserInfo(Id).getName();
-        if (name.isEmpty()){
+        List<String> Ids = new ArrayList<>();
+        Ids.add(Id);
+        final String[] name = {""};
+        if (NIMClient.getService(UserService.class).getUserInfo(Id).getName() == null){
+            NIMClient.getService(UserService.class).fetchUserInfo(Ids).setCallback(new RequestCallback<List<NimUserInfo>>() {
+                @Override
+                public void onSuccess(List<NimUserInfo> nimUserInfos) {
+                    name[0] = nimUserInfos.get(0).getName();
+                }
+
+                @Override
+                public void onFailed(int i) {
+
+                }
+
+                @Override
+                public void onException(Throwable throwable) {
+
+                }
+            });
+        }else {
+            name[0] =  NIMClient.getService(UserService.class).getUserInfo(Id).getName();
+        }
+
+        if (name[0].isEmpty()){
             return Id;
         }
-        return name;
+
+        return name[0];
     }
 
 

+ 7 - 7
uikit/uikit.iml

@@ -59,13 +59,6 @@
       <sourceFolder url="file://$MODULE_DIR$/assets" type="java-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
-      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
@@ -73,6 +66,13 @@
       <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
       <excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />

Some files were not shown because too many files changed in this diff