Android小项目——社交类app(低仿微信)
一、项目简介
· 前言
暑假参与了一个移动端Android应用开发的项目,原本打算做新闻类的,但是做着做着就跑偏了最后做成了社交类哈哈哈,所以包名一直没改,还是News。记录一下这个安卓项目,第一次上手,有问题请多多指教哦。
· 项目框架
· 网络传输
我们采用okhttp3的网络方式与服务器进行数据交互,okhttp3是一个高性能的http库,支持http2,对一台机器的所有请求共享同一个socket,通过缓存避免重复的请求。将数据打包成Jason格式进行传输。构造函数是OkhttpClient()。
二、主要功能及代码分析
· 注册和登录
初始界面:用户选择登录or注册
注册界面&登录界面
登录和注册功能的实现主要使用okhttp3方式与服务器进行交互,两者的技术实现完全一样。这里登录失败或者注册成功/失败都需要跳转到一个通知界面,所以要用到Handler机制,Handler是线程间的消息机制,Android中只有主线程才能修改UI界面,为了避免ANR(程序无响应),有时需要把一些耗时操作(网络请求、复杂计算)交给子线程完成,若子线程的执行需要修改UI界面时,就需要通知主线程,在Android中利用Handler机制可以实现这个通知。
登录——get用户信息,向服务器发送登录请求
String jsonstr = new Gson().toJson(hostInfo); //数据打包为Jason格式
RequestBody body = RequestBody.create(MediaType.parse("application/json"),jsonstr);
OkHttpClient client = new OkHttpClient();
//向服务器发送请求
Request request = new Request.Builder().url("http://192.168.43.121:8080/login").post(body).build();
//这里的http://192.168.43.121:8080就是我们服务器的url,login是为登录创建的存储文件夹
client.newCall(request).enqueue(new Callback() {
//收到服务器回复
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String back = response.body().string();
if(back.equals("success")){
//若收到服务器的回复为success,则成功。(这个success是你与服务器约定好的一个字符串)
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
startActivity(intent);
}else if(back.equals("fail")){
Handler handler=new Handler(Looper.getMainLooper());
handler.post(new Runnable(){
public void run(){
Toast.makeText(LoginActivity.this,"手机号码或密码错误,请重新输入!",Toast.LENGTH_SHORT).show();
}
});
}
}
});
注册——get用户信息,向服务器发送注册请求
String jsonstr = new Gson().toJson(hostInfo); //数据打包成Jason格式
RequestBody body = RequestBody.create(MediaType.parse("application/json"),jsonstr);
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("http://192.168.43.121:8080/insert").post(body).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.v("call","fail");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String back = response.body().string();
if(back.equals("success")){
Handler handler=new Handler(Looper.getMainLooper());
handler.post(new Runnable(){
public void run(){
Toast.makeText(RegisterActivity.this,"注册成功,请重新登录!",Toast.LENGTH_SHORT).show();
}
});
Intent nextIntent = new Intent(