前端時間打了n天游戲,曠了n篇博客,今天終於干了點正事了。。。
1、手機驗證碼
我是調用的掌淘科技免費的SMSSDK,雖然個人開發編輯不了短信模板,但也夠可以了,畢竟是免費的嘛。
調用流程:
a、申請appkey和appsecert,下面這里有詳解
http://bbs.mob.com/forum.php?mod=viewthread&tid=8212&extra=page%3D1
b、在項目根目錄的build.gradle中添加依賴

c、在使用SMSSDK模塊的build.gradle中添加這個,把appKey和appSecret填成自己的就行

d、無界面代碼調用
d-1、注冊監聽回調
EventHandler eventHandler = new EventHandler() {
public void afterEvent(int event, int result, Object data) {
// afterEvent會在子線程被調用,因此如果后續有UI相關操作,需要將數據發送到UI線程
Message msg = new Message();
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
new Handler(Looper.getMainLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.obj;
if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
if (result == SMSSDK.RESULT_COMPLETE) {
// TODO 處理成功得到驗證碼的結果
// 請注意,此時只是完成了發送驗證碼的請求,驗證碼短信還需要幾秒鍾之后才送達
} else {
// TODO 處理錯誤的結果
((Throwable) data).printStackTrace();
}
} else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
if (result == SMSSDK.RESULT_COMPLETE) {
// TODO 處理驗證碼驗證通過的結果
} else {
// TODO 處理錯誤的結果
((Throwable) data).printStackTrace();
}
}
// TODO 其他接口的返回結果也類似,根據event判斷當前數據屬於哪個接口
return false;
}
}).sendMessage(msg);
}
};
SMSSDK.registerEventHandler(eventHandler);//通過這行代碼注冊監聽回調
d-2、申請驗證碼
SMSSDK.getVerificationCode("86", phone);
d-3、提交驗證
SMSSDK.submitVerificationCode("86", phone, code);
d-4、注銷
// 使用完EventHandler需注銷,否則可能出現內存泄漏
protected void onDestroy() {
super.onDestroy();
SMSSDK.unregisterEventHandler(eventHandler);
}
2、注冊&登錄
a、判斷手機號是否已經注冊(是否已經存在於數據庫)
注冊:未注冊則將數據轉化為json對象通過okhttp發送至服務器
登錄:從服務器向客戶端傳輸用戶信息並存儲至本地
客戶端:
public class LogAndRegister{
//這個函數用於判斷是否已經注冊,如果注冊了就回傳用戶信息,並用sendRegRes接口將數據傳輸至LoginActivity
public static boolean snetenceHaveRegist(final String phone, final sendRgRes sendRgRes){
new Thread(new Runnable() {
@Override
public void run() {
MediaType mediaType=MediaType.parse("text/x-markdown; charset=utf-8");
String request_body=phone;
Request request=new Request.Builder().
url("http://123.56.137.134/XiaoYiServer/sentenceRegd")
.post(RequestBody.create(mediaType,request_body)).build();
OkHttpClient okHttpClient=new OkHttpClient();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("LogAndRegister-------","phone查詢請求失敗");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//response.body只能調一次
String body=response.body().string();
Log.d("LogAndRegister-------",body);
sendRgRes.sendRgRes(body);
}
});
}
}).start();
return false;
}
//這個函數用於向服務器發送用戶信息,並將成功或失敗信息通過sendRegSucc接口傳回LoginActivity
public static void Login(final JSONObject jsonObject, final SendRegSucc sendRegSucc){
new Thread(new Runnable() {
@Override
public void run() {
MediaType mediaType=MediaType.parse("application/json; charset=utf-8");
Request request=new Request.Builder()
.url("http://123.56.137.134/XiaoYiServer/Regis")
.post(RequestBody.create(mediaType,jsonObject.toJSONString())).build();
OkHttpClient okHttpClient=new OkHttpClient();
Call call=okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
sendRegSucc.sendRegSucc(false);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
sendRegSucc.sendRegSucc(true);
}
});
}
}).start();
}
public interface sendRgRes{
public void sendRgRes(String body);
}
public interface SendRegSucc{
public void sendRegSucc(boolean succ);
}
}
服務器端:
//將用戶信息存儲至數據庫
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
InputStream is=request.getInputStream();
InputStreamReader ir=new InputStreamReader(is);
BufferedReader br=new BufferedReader(ir);
StringBuffer sb=new StringBuffer();
String s="";
while((s=br.readLine())!=null) {
sb.append(s);
}
br.close();
ir.close();
is.close();
JSONObject jsonObject=JSON.parseObject(sb.toString());
try {
Connection con=DBUtil.lin("XiaoYi");
Statement stmt=con.createStatement();
String sql="insert into user values(((select max(id) form user)+1),'"+jsonObject.getString("username")+"','"
+jsonObject.getString("phone")+"',null,null)";
stmt.executeUpdate(sql);
stmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.getWriter().print(true);
response.getWriter().close();
}
//判斷手機號是否注冊,讀取用戶數據
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
InputStream is=request.getInputStream();
InputStreamReader ir=new InputStreamReader(is);
BufferedReader br=new BufferedReader(ir);
UserBean user=new UserBean();
String s="";
StringBuffer sb=new StringBuffer();
Boolean isIn=false;
while((s=br.readLine())!=null) {
sb.append(s);
}
System.out.println(sb.toString());
try {
Connection con=DBUtil.lin("XiaoYi");
java.sql.Statement stmt=con.createStatement();
ResultSet rsst=stmt.executeQuery("select * from user where phone='"+sb.toString()+"'");
if(rsst.next()) {
isIn=true;
}
user.setId(rsst.getInt("id"));
user.setUsername(rsst.getString("username"));
user.setHead(rsst.getString("head"));
user.setPhone(rsst.getString("phone"));
user.setSex(rsst.getString("sex"));
rsst.close();
stmt.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONObject jsonObject=JSONObject.parseObject(JSON.toJSONString(user));
br.close();
ir.close();
is.close();
if(isIn) {
response.getWriter().print(isIn);
}
else {
System.out.println(jsonObject.toJSONString());
response.getWriter().print(jsonObject.toJSONString());
}
response.getWriter().close();
}
