第三周(2) app详细页面设计与代码编写

来源:互联网 发布:数据分析属经济学吗 编辑:程序博客网 时间:2024/06/01 10:05

引言

这周前半部分的工作我们主要对页面进行了初步设计,也实现了一些功能代码,后半部分在页面方面进行了进一步的详细设计,并且编写了其他功能代码,总结一下工作目录:
  • 页面详细设计与所有页面基本完成
  • 客户端代码编写
  • 后台代码编写

这里我主要针对我这两天进行的工作:添加好友功能进行介绍。


添加好友

添加好友流程如下:

  1. 搜索用户id
  2. 搜索到用户后,输入验证信息
  3. 输入备注,发送添加请求,附带验证信息,等待回复

所以需要三个界面,搜索界面,验证信息界面,发送界面

1、搜索界面

界面如下所示:


在搜索框中输入用户id或者手机号,点击搜索按钮,即可进行用户搜索。

搜索流程如下:

  1. 检查网络是否可用
  2. 根据输入的数据长度判断是手机号还是id
  3. 发送http请求,等待后台回复
  4. 若有该用户,则跳转验证信息界面
  5. 若无该用户,则显示不存在

编码如下:

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传递过来。

发送界面具体逻辑如下:

  1. 判断网络是否可用
  2. 网络可用,则判断是否备注输入合法
  3. 点击发送,按照后台要求参数格式发送好友请求
  4. 若发送成功,则回到搜索用户界面
  5. 若发送失败,则弹框

根据逻辑编码如下:

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
原创粉丝点击