第三周(2) app详细页面设计与代码编写
来源:互联网 发布:数据分析属经济学吗 编辑:程序博客网 时间:2024/06/01 10:05
引言
这周前半部分的工作我们主要对页面进行了初步设计,也实现了一些功能代码,后半部分在页面方面进行了进一步的详细设计,并且编写了其他功能代码,总结一下工作目录:- 页面详细设计与所有页面基本完成
- 客户端代码编写
- 后台代码编写
这里我主要针对我这两天进行的工作:添加好友功能进行介绍。
添加好友
添加好友流程如下:
- 搜索用户id
- 搜索到用户后,输入验证信息
- 输入备注,发送添加请求,附带验证信息,等待回复
所以需要三个界面,搜索界面,验证信息界面,发送界面
1、搜索界面
界面如下所示:
在搜索框中输入用户id或者手机号,点击搜索按钮,即可进行用户搜索。
搜索流程如下:
- 检查网络是否可用
- 根据输入的数据长度判断是手机号还是id
- 发送http请求,等待后台回复
- 若有该用户,则跳转验证信息界面
- 若无该用户,则显示不存在
编码如下:
package com.example.sdu.myflag.activity;import android.content.Intent;import android.os.Bundle;import android.util.TypedValue;import android.view.View;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.SearchView;import android.widget.SearchView.OnQueryTextListener;import android.widget.TextView;import android.widget.Toast;import com.example.sdu.myflag.base.BaseActivity;import com.example.sdu.myflag.R;import com.example.sdu.myflag.util.BaseTools;import com.example.sdu.myflag.util.NetUtil;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import java.util.LinkedList;import java.util.List;import okhttp3.Response;public class SearchFriendActivity extends BaseActivity implements SearchView.OnQueryTextListener { private SearchView sv; private TextView empty_layout; String user; @Override public int getLayoutId() { return R.layout.activity_searchfriend; } @Override public void afterCreate(Bundle savedInstanceState) { init(); sv.setOnQueryTextListener(this); } private void init() { sv = (SearchView) findViewById(R.id.searchView); empty_layout = (TextView) findViewById(R.id.no_user_tv); int tv_id = sv.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); TextView tv = (TextView) sv.findViewById(tv_id); tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); } private void searchFriend(String str) { if (!BaseTools.isNetworkAvailable(SearchFriendActivity.this)) { Toast.makeText(SearchFriendActivity.this, "当前网络不可用!", Toast.LENGTH_LONG).show(); return; } SearchFriendResult searchFriendResult = new SearchFriendResult(); List<NetUtil.Param> params = new LinkedList<NetUtil.Param>(); if (str.length() == 11) { // 手机号 params.add(new NetUtil.Param("phone", str)); } else { // id params.add(new NetUtil.Param("id", str)); } try { NetUtil.getResult(NetUtil.findUserUrl, params, searchFriendResult); } catch (IOException e) { e.printStackTrace(); } } @Override public boolean onQueryTextSubmit(String query) { searchFriend(query); return false; } @Override public boolean onQueryTextChange(String newText) { return false; } private class SearchFriendResult implements NetUtil.CallBackForResult { @Override public void onFailure(final IOException e) { SearchFriendActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(SearchFriendActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); } }); } @Override public void onSuccess(Response response) { if (response.isSuccessful()) { try { JSONObject jsonObject = new JSONObject(response.body().string()); user = jsonObject.getString("user"); JSONObject userObj = jsonObject.getJSONObject("user"); int uid = userObj.getInt("uid"); if (uid == 0) { SearchFriendActivity.this.runOnUiThread(new Runnable() { @Override public void run() { empty_layout.setVisibility(View.VISIBLE); } }); } else { //查找成功,跳转到添加界面 //json解析在添加界面进行 SearchFriendActivity.this.runOnUiThread(new Runnable() { @Override public void run() { empty_layout.setVisibility(View.GONE); Intent intent = new Intent(); intent.setClass(SearchFriendActivity.this, AddFriendMessageActivity.class); intent.putExtra("user", user); startActivity(intent); } }); } } catch (JSONException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } } public void searchFriendBack(View view){ this.finish(); }}
2、验证信息界面
界面如图:
界面逻辑十分简单,只要输入验证信息,点击下一步按钮即可,验证信息会被加入Intent,传递到发送界面,不涉及任何网络请求。
编码如下:
package com.example.sdu.myflag.activity;import android.content.Intent;import android.database.CursorJoiner;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import com.example.sdu.myflag.base.BaseActivity;import com.example.sdu.myflag.R;public class AddFriendMessageActivity extends BaseActivity { private Button next; private EditText editText; private Bundle bundle; @Override public int getLayoutId() { return R.layout.activity_addfriendmessage; } @Override public void afterCreate(Bundle savedInstanceState) { init(); setListener(); } private void init(){ next = (Button) findViewById(R.id.messageNextButton); editText = (EditText) findViewById(R.id.messageEditText); bundle = this.getIntent().getExtras(); } private void setListener() { next.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String message = editText.getText().toString(); String user = bundle.getString("user"); Intent intent = new Intent(AddFriendMessageActivity.this, AddFriendActivity.class); intent.putExtra("message", message); intent.putExtra("user", user); startActivityForResult(intent, 0); } }); } public void friendMsgBack(View view){ this.finish(); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode){ case RESULT_OK: AddFriendMessageActivity.this.finish(); } }}
3、发送界面
界面如下:
界面上显示的信息有:搜索到的用户头像、用户名,验证信息,界面需要输入对用户的备注,用户信息确认无误,并且备注填好后,点击右上角发送按钮即可发送好友请求,用户的信息以及验证信息都是从前面的界面通过Intent中的Bundle传递过来。
发送界面具体逻辑如下:
- 判断网络是否可用
- 网络可用,则判断是否备注输入合法
- 点击发送,按照后台要求参数格式发送好友请求
- 若发送成功,则回到搜索用户界面
- 若发送失败,则弹框
根据逻辑编码如下:
package com.example.sdu.myflag.activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.example.sdu.myflag.R;import com.example.sdu.myflag.base.BaseActivity;import com.example.sdu.myflag.base.BaseApplication;import com.example.sdu.myflag.util.BaseTools;import com.example.sdu.myflag.util.NetUtil;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import java.util.ArrayList;import java.util.List;import okhttp3.Response;public class AddFriendActivity extends BaseActivity { private String user, friendId, message; private Button sendButton; private EditText remarkEditText; private TextView nameTextView, informationTextView; private ImageView icon_img; Intent mIntent; @Override public int getLayoutId() { return R.layout.activity_addfriend; } @Override public void afterCreate(Bundle savedInstanceState) { init(); getJson(); setListener(); } private void init() { sendButton = (Button) findViewById(R.id.addFriendSendButton); nameTextView = (TextView) findViewById(R.id.addFriendNameTextView); informationTextView = (TextView) findViewById(R.id.addFriendInformationTextView); remarkEditText = (EditText) findViewById(R.id.addFriendRemarkEditText); icon_img = (ImageView) findViewById(R.id.icon_img); mIntent = getIntent(); Bundle bundle = mIntent.getExtras(); user = bundle.getString("user"); message = bundle.getString("message"); } private void getJson() { try { JSONObject userJson = new JSONObject(user); int iconId = userJson.optInt("photo"); friendId = userJson.optInt("uid") + ""; String friendName = userJson.optString("nickname"); icon_img.setImageDrawable(getResources().getDrawable(BaseApplication.HeadIcon[iconId])); if (friendName != null) { nameTextView.setText(friendName); } if (message != null) { informationTextView.setText(message); } } catch (JSONException e) { e.printStackTrace(); } } private void setListener() { sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!BaseTools.isNetworkAvailable(AddFriendActivity.this)) { Toast.makeText(AddFriendActivity.this, "当前网络不可用!", Toast.LENGTH_LONG).show(); return; } String remark = remarkEditText.getText().toString(); AddFriendResult addFriendResult = new AddFriendResult(); List<NetUtil.Param> params = new ArrayList<>(); SharedPreferences sharedPreferences = BaseApplication.getInstance().getSharedPreferences("User", Context.MODE_PRIVATE); String requestId = sharedPreferences.getString("uid", null); if (requestId == null) { Toast.makeText(AddFriendActivity.this, "获取用户ID失败!", Toast.LENGTH_SHORT).show(); return; } if (friendId == null) { Toast.makeText(AddFriendActivity.this, "获取好友ID失败!", Toast.LENGTH_SHORT).show(); return; } params.add(new NetUtil.Param("id", friendId)); params.add(new NetUtil.Param("requestId", requestId)); params.add(new NetUtil.Param("message", message)); params.add(new NetUtil.Param("remark", remark)); try { NetUtil.getResult(NetUtil.addFriendUrl, params, addFriendResult); } catch (IOException e) { e.printStackTrace(); } } }); } private class AddFriendResult implements NetUtil.CallBackForResult { @Override public void onFailure(final IOException e) { AddFriendActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AddFriendActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); } }); } @Override public void onSuccess(Response response) { if (response.isSuccessful()) { AddFriendActivity.this.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AddFriendActivity.this, "请求发送成功!", Toast.LENGTH_LONG).show(); setResult(RESULT_OK, mIntent); AddFriendActivity.this.finish(); } }); } } } public void addFriendBack(View view) { setResult(RESULT_CANCELED, mIntent); this.finish(); }}
4、测试
我的这一块功能的测试工作由朱宏进行,针对每一个界面的逻辑设计多组测试用例,在真机和虚拟机上分别进行测试,直到测试全部通过。
总结
本周的工作告一段落,整体来说功能实现的不错,下周要继续编码工作,app在我们的努力下也正在慢慢成型,我们都会更加努力。
阅读全文
0 0
- 第三周(2) app详细页面设计与代码编写
- 第三周(1) app页面初步设计与代码编写
- MyFlag Step6:app详细页面设计与代码编写
- MyFlag Step6:app详细页面设计与代码编写
- MyFlag Step6:app详细页面设计与代码编写
- MyFlag Step5:app页面初步设计与代码编写
- MyFlag Step5:app页面初步设计与代码编写
- MyFlag Step5:app页面初步设计与代码编写
- 第二周(2) App详细设计
- 概要设计与详细设计如何编写
- 第二周(1) App模块划分与详细设计初步进行
- 设计一个计算体重的APP(具体用页面带值转换)(详细)
- 【用户授权设计】java第三方登录(微博,QQ)详细代码
- 如何编写详细设计说明书(仅供参考)
- 算法设计与应用基础: 第三周(2)
- 第三周项目 2 测试与设计
- MyFlag Step9:app端与服务器端的代码编写
- 常见代码编写规范(二)--详细数据的读与显示
- mybatis generatorConfig.xml生成配置文件及三种运行方式
- css分辨率识别,移动端固定图片大小
- R语言基础
- android studio删除jar包后报错
- 卷积神经网络原理
- 第三周(2) app详细页面设计与代码编写
- 【计算机组成原理】第2章 运算方法和运算器
- matlab机器学习库
- MATLAB 牛顿插值函数
- Java实现常用算法
- 【MyBatis】MyBatis的学习笔记之<select>标签
- S5PV210系列 (裸机十七)之 LCD显示器
- win7蓝牙驱动的使用方法
- Java面向对象之二继承