300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)

Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)

时间:2022-11-15 11:27:47

相关推荐

Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)

OKhttp封装

IRequest

package .chat.OKhttp;import java.util.Map;public interface IRequest {public static final String POST = "POST";public static final String GET = "GET";public static final String DELETE = "DELETE";public static final String PUT = "PUT";/*** 请求方式* @param method*/void setMethod(String method);/*** 指定请求头* @param header*/void setHeader(Map<String,String> header);/*** 指定请求信息* @param body*/void setBody(Map<String,Object> body);/*** 提供给执行库请求行URL* @return*/String getUrl();/*** 提供给执行库请求行URL* @return*/Map<String,String> getHeader();/*** 请求体* @return*/Map<String,Object> getBody();}

IHttpClient

package .chat.OKhttp;import java.io.File;import java.util.Map;public interface IHttpClient {IResponse get(IRequest request);/*** json格式的post* @param request* @return*/IResponse post(IRequest request);/*** 表单类型的post* @param request* @param map* @param file* @return*/IResponse upload_image_post(IRequest request, Map<String, Object> map, File file);IResponse delete(IRequest request);IResponse put(IRequest request);}

IResponse

package .chat.OKhttp;public interface IResponse {/*** 响应码* @return*/int getCode();/*** 返回的数据* @return*/String getData();}

RequestImpl

package .chat.OKhttp.impl;import java.util.Map;import .chat.OKhttp.IRequest;public class RequestImpl implements IRequest {private String method = POST;private String url;private Map<String, String> header;private Map<String, Object> body;public RequestImpl(String url) {/*** 初始化公共参数和头部信息*/this.url = url;}@Overridepublic void setMethod(String method) {this.method = method;}@Overridepublic void setHeader(Map<String, String> header) {this.header = header;}@Overridepublic void setBody(Map<String, Object> body) {this.body = body;}@Overridepublic String getUrl() {if (GET.equals(method)) {// 组装post请求参数for (String key : body.keySet()) {url = url.replace("${" + key + "}", body.get(key).toString());}}return url;}@Overridepublic Map<String, String> getHeader() {return header;}@Overridepublic Map<String,Object> getBody() {// 组装post请求参数return body;}}

OkHttpClientImpl

package .chat.OKhttp.impl;import java.io.File;import java.io.IOException;import java.util.Map;import .chat.OKhttp.IHttpClient;import .chat.OKhttp.IRequest;import .chat.OKhttp.IResponse;import okhttp3.FormBody;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;public class OkHttpClientImpl implements IHttpClient {OkHttpClient mOkHttpClient = new OkHttpClient.Builder().build();@Overridepublic IResponse get(IRequest request) {/*** 解析业务参数*/// 指定请求方式request.setMethod(IRequest.GET);Map<String, String> header = request.getHeader();Request.Builder builder = new Request.Builder();for (String key : header.keySet()) {builder.header(key, header.get(key));}builder.url(request.getUrl()).get();Request okRequest = builder.build();return execute(okRequest);}@Overridepublic IResponse post(IRequest request) {request.setMethod(IRequest.POST);Map<String, Object> body = request.getBody();FormBody.Builder builderBody = new FormBody.Builder();for (String key : body.keySet()) {builderBody.add(key, (String) body.get(key));}RequestBody requestBody = builderBody.build();Map<String, String> header = request.getHeader();Request.Builder builder = new Request.Builder();for (String key : header.keySet()) {builder.header(key, header.get(key));}builder.url(request.getUrl()).post(requestBody);Request okRequest = builder.build();return execute(okRequest);}@Overridepublic IResponse upload_image_post(IRequest request, Map<String, Object> map, File file) {/*** 实现文件上传*/request.setMethod(IRequest.POST);MediaType MEDIA_TYPE_IMAGE = MediaType.parse("image/*");MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);if (file != null) {requestBody.addFormDataPart("image", file.getName(),RequestBody.create(MEDIA_TYPE_IMAGE, file));}if (map != null) {// map 里面是请求中所需要的 key 和 valuefor (Map.Entry entry : map.entrySet()) {//requestBody.addFormDataPart(valueOf(entry.getKey()), valueOf(entry.getValue()));}}Map<String, String> header = request.getHeader();Request.Builder builder = new Request.Builder();for (String key : header.keySet()) {builder.header(key, header.get(key));}builder.url(request.getUrl()).post(requestBody.build());Request okRequest = builder.build();return execute(okRequest);}@Overridepublic IResponse delete(IRequest request) {request.setMethod(IRequest.DELETE);Map<String, String> header = request.getHeader();Request.Builder builder = new Request.Builder();for (String key : header.keySet()) {builder.header(key, header.get(key));}builder.url(request.getUrl()).delete(null);Request okRequest = builder.build();return execute(okRequest);}@Overridepublic IResponse put(IRequest request) {request.setMethod(IRequest.PUT);MediaType mediaType = MediaType.parse("application/json; charset=utf-8");RequestBody requestBody = RequestBody.create(mediaType, request.getBody().toString());Map<String, String> header = request.getHeader();Request.Builder builder = new Request.Builder();for (String key : header.keySet()) {builder.header(key, header.get(key));}builder.url(request.getUrl()).put(requestBody);Request okRequest = builder.build();return execute(okRequest);}private IResponse execute(Request request) {ResponseImpl commonResponse = new ResponseImpl();try {Response response = mOkHttpClient.newCall(request).execute();// 设置状态码commonResponse.setCode(response.code());String body = response.body().string();// 设置响应数据commonResponse.setData(body);} catch (IOException e) {e.printStackTrace();commonResponse.setCode(ResponseImpl.STATE_UNKNOW_ERROR);commonResponse.setData(e.getMessage());}return commonResponse;}}

ResponseImpl

package .chat.OKhttp.impl;import .chat.OKhttp.IResponse;public class ResponseImpl implements IResponse {public static final int STATE_UNKNOW_ERROR = 100001;public static int STATE_OK = 200;private int code;private String data;@Overridepublic String getData() {return data;}@Overridepublic int getCode () {return code;}public void setCode(int code) {this.code = code;}public void setData(String data) {this.data = data;}}

计算并获取checkSum

CheckSumBuilder

package .chat.utils;import java.security.MessageDigest;public class CheckSumBuilder {// 计算并获取CheckSumpublic static String getCheckSum(String appSecret, String nonce, String curTime) {return encode("sha1", appSecret + nonce + curTime);}// 计算并获取md5值public static String getMD5(String requestBody) {return encode("md5", requestBody);}private static String encode(String algorithm, String value) {if (value == null) {return null;}try {MessageDigest messageDigest= MessageDigest.getInstance(algorithm);messageDigest.update(value.getBytes());return getFormattedText(messageDigest.digest());} catch (Exception e) {throw new RuntimeException(e);}}private static String getFormattedText(byte[] bytes) {int len = bytes.length;StringBuilder buf = new StringBuilder(len * 2);for (int j = 0; j < len; j++) {buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);buf.append(HEX_DIGITS[bytes[j] & 0x0f]);}return buf.toString();}private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5','6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };}

请求头参数

activity_register.xml

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><LinearLayoutandroid:layout_width="match_parent"android:layout_height="44dp"android:orientation="horizontal"android:gravity="center_vertical"android:background="@color/deepskyblue"><LinearLayoutandroid:id="@+id/ll_return"android:layout_width="44sp"android:layout_height="44sp"android:gravity="center_vertical"><ImageViewandroid:layout_width="24sp"android:layout_height="24sp"android:src="@drawable/return1"android:layout_marginStart="20dp"android:contentDescription="@string/tv_icon_des"/></LinearLayout><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/tv_register1"android:textColor="@color/white"android:textSize="20sp"android:layout_marginStart="20dp"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="15dp"android:layout_marginRight="15dp"android:layout_marginTop="80dp"android:orientation="vertical" ><ImageViewandroid:layout_width="50dp"android:layout_height="50dp"android:layout_marginBottom="40dp"android:src="@drawable/logo" /><.chat.utils.ClearEditTextandroid:textCursorDrawable="@drawable/cursor_color"android:id="@+id/et_account"android:layout_width="fill_parent"android:layout_height="60dp"android:theme="@style/MyEditText"android:inputType="number"android:textColorHint="@color/gainsboro"android:textColor="@color/white"android:maxLength="11"android:hint="@string/et_mobile_hint" /><.chat.utils.ClearEditTextandroid:textCursorDrawable="@drawable/cursor_color"android:id="@+id/et_passwords"android:layout_width="fill_parent"android:layout_height="60dp"android:theme="@style/MyEditText"android:inputType="textPassword"android:textColorHint="@color/gainsboro"android:textColor="@color/white"android:hint="@string/et_passwords_hint" /><Buttonandroid:id="@+id/btn_register"android:layout_width="fill_parent"android:layout_height="40dp"android:background="@color/deepskyblue"android:layout_marginTop="15dp"android:text="@string/tv_register"android:textColor="@color/white"/></LinearLayout></LinearLayout><RelativeLayoutandroid:id="@+id/rl_loading"android:layout_width="150dp"android:layout_height="150dp"android:layout_gravity="center"android:background="@drawable/shape_label_clarity_black"><com.github.ybq.android.spinkit.SpinKitViewxmlns:app="/apk/res-auto"android:id="@+id/pb_loading"style="@style/SpinKitView.Large.Circle"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"app:SpinKit_Color="@color/white" /><TextViewandroid:id="@+id/tv_loading_text"android:layout_below="@id/pb_loading"android:layout_centerHorizontal="true"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"/></RelativeLayout></FrameLayout>

RegisterActivity

package .chat;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.annotation.Nullable;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;import org.json.JSONObject;import java.lang.ref.WeakReference;import java.util.HashMap;import java.util.Map;import .chat.OKhttp.IHttpClient;import .chat.OKhttp.IRequest;import .chat.OKhttp.IResponse;import .chat.OKhttp.impl.OkHttpClientImpl;import .chat.OKhttp.impl.RequestImpl;import .mon;import .chat.utils.LoadingUtils;import .chat.utils.ThreadUtils;public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {private LinearLayout mLlReturn;private Button mBtnRegister;private EditText mEtAccount;private EditText mEtpassword;private LoadingUtils loadingUtils;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);initView();init();initListener();}@Overrideprotected void onDestroy() {super.onDestroy();}private void initView() {mLlReturn = this.findViewById(R.id.ll_return);mBtnRegister = this.findViewById(R.id.btn_register);mEtAccount = this.findViewById(R.id.et_account);mEtpassword = this.findViewById(R.id.et_passwords);loadingUtils = new LoadingUtils(RegisterActivity.this, "注册中");}private void init() {loadingUtils.creat();}private void initListener() {mLlReturn.setOnClickListener(this);mBtnRegister.setOnClickListener(this);}@Overridepublic void onClick(View view) {final String account = mEtAccount.getText().toString();final String password = mEtpassword.getText().toString();switch (view.getId()) {case R.id.ll_return:finish();break;case R.id.btn_register:if (password.length() >= 6) {loadingUtils.show();register(account, password);} else {Toast.makeText(this, "密码少于6位", Toast.LENGTH_SHORT).show();}break;default:break;}}private void register(final String account, final String password) {ThreadUtils.runInThread(new Runnable() {@Overridepublic void run() {Message message = new Message();Bundle data = new Bundle();try {Map<String,Object> parameter = new HashMap<>();parameter.put("accid", account);parameter.put("name", account);parameter.put("token", password);Map<String,String> head = Common.getHead();IRequest request = new RequestImpl("ease.im/nimserver/user/create.action");//设置请求头,这里要几个就setHeader几次request.setHeader(head);// 设置请求体 同上request.setBody(parameter);// 获取一个okhttpclient实例IHttpClient mHttpClient = new OkHttpClientImpl();// 得到服务器端返回的结果IResponse response = mHttpClient.post(request);JSONObject returnObj = new JSONObject(response.getData());Log.d("console", "回调: " + returnObj.toString());int code = (int) returnObj.get("code");switch (code) {case 200:message.what = 200;data.putSerializable("Msg", Common.MSG_REGISTER_SUCCESS);break;case 414:message.what = 414;data.putSerializable("Msg", Common.MSG_REGISTER_HAVE_PHONE);break;default:message.what = 1000;data.putSerializable("Msg", Common.MSG_REGISTER_ERROR);break;}message.setData(data);handler.sendMessage(message);} catch (Exception e) {e.printStackTrace();data.putSerializable("Msg",Common.MSG_REGISTER_ERROR);message.setData(data);handler.sendMessage(message);}}});}@Overridepublic void onPointerCaptureChanged(boolean hasCapture) {}private static class IHandler extends Handler {private final WeakReference<Activity> mActivity;public IHandler(RegisterActivity activity) {mActivity = new WeakReference<Activity>(activity);}@Overridepublic void handleMessage(Message msg) {((RegisterActivity) mActivity.get()).loadingUtils.dismiss();int flag = msg.what;String Msg = (String) msg.getData().getSerializable("Msg");switch (flag) {case 0:((RegisterActivity) mActivity.get()).showTip(Msg);break;case 200:((RegisterActivity) mActivity.get()).showTip(Msg);((RegisterActivity) mActivity.get()).finish();break;case 414:((RegisterActivity) mActivity.get()).showTip(Msg);break;case 1000:((RegisterActivity) mActivity.get()).showTip(Msg);break;default:break;}}}private IHandler handler = new IHandler(this);private void showTip(String str) {Toast.makeText(this, str, Toast.LENGTH_SHORT).show();}}

项目下载地址:Android聊天软件开发(基于网易云IM即时通讯)——第三部分_安卓开发聊天-Android代码类资源-CSDN下载

下一章将介绍添加好友

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。