当前位置:   article > 正文

安卓开发框架

安卓开发框架

最近项目一期开发完成,有一点空闲时间,经过一段时间的准备,参考常见的网络应用并对其进行一定的研究,再结合自己的现有的一点点经验,封装了一个android应用开发”框架”,说是”框架”简直是夸下了海口,因为自己的那点小九九不足做出如此高大上的东西来,姑且叫”框架”吧。

框架”概述

  • async-http-client(发起网络请求)
  • Glide(异步加载网络图片资源)
  • Gson(解析服务器返回的json数据)
  • PullToRefresh(下拉刷新、上拉加载)

发起网络请求

  • 发起一个Get请求(在Activity及Fragment中均只需要通过以下代码发起一个Get请求)
mHttpAsyncTask.getMethod(ServerConfig.INTERVIEW_NOTICE_COUNT, this);
  • 1
  • 发起一个带参数的Get请求
  1. RequestParams params = new RequestParams();
  2. params.put("userId", "f5a2c82950c70a9c0150cc2d27e3006c");
  3. params.put("toUserId", "f5a2c82950c70a9c0150c32d27e3007c");
  4. params.put("content", "Hello guy!");
  5. mHttpAsyncTask.postMethod(ServerConfig.SEND_TEXT_MESSAGE, this, params, false);
  • 1
  • 发起一个Post请求
  1. RequestParams params = new RequestParams();
  2. File file = new File("/storage/emulated/0/BaiduNetdisk/img_Leo.png");
  3. try {
  4. params.put("file", file);
  5. params.put("name", "Jessie");
  6. } catch (FileNotFoundException e) {
  7. e.printStackTrace();
  8. }
  9. mHttpAsyncTask.postMethod("http://192.168.198.229/upload.php", this, params);
  • 1

这里面值得一提的是:服务器URL通常是按模块划分,所以会将URL分割成诸如HTTP_PROTOCAL + MODULE_USER + ACTION这样的结构,如此才能在请求网络数据的回调中对返回结果做出区分,具体还是在使用过程中才深有体会。

  • 关于网络请求回调
  1. @Override
  2. public void onPostExecute(int statusCode, String action, String response, Object... o) {
  3. if (statusCode == HttpAsyncTask.CODE_SUCCESS) {
  4. // action是请求网络的完整地址
  5. // Get请求:action = ServerConfig.INTERVIEW_NOTICE_COUNT + params.toString()
  6. // Post请求:action = ServerConfig.INTERVIEW_NOTICE_COUNT
  7. if (action.contains(ServerConfig.INTERVIEW_NOTICE_COUNT)) {
  8. InterviewNotice interviewNotice = mApplication.getObject(response, InterviewNotice.class);
  9. TextView textView1 = (TextView) mActivity.findViewById(R.id.id_empty_line1);
  10. StringBuffer buffer = new StringBuffer();
  11. buffer.append("未读数:" + interviewNotice.getData().getUnreadCount() + "\r\n");
  12. buffer.append("返回码:" + interviewNotice.getResultCode() + "\r\n");
  13. buffer.append("返回消息:" + interviewNotice.getResultMsg());
  14. textView1.setText(buffer.toString());
  15. } else {
  16. // 其他请求成功返回 如果有多个请求 则应有else if()分支
  17. LogUtil.e(response);
  18. }
  19. }
  20. }
  • 1

异步加载图片

  • 加载网络图片资源
GlideUtil.display(bean.mImageString, holder.mImageView);
  • 1
  • 加载本地图片资源
GlideUtil.displayLocal(file.getAbsolutePath(), holder.mImageView);
  • 1

解析Json数据

  • 数据:json字符串
{"data":{"unreadCount":0},"resultCode":"000000","resultMsg":"成功!"}
  • 1
  • Pojo:bean
  1. package com.android.entity;
  2. public class InterviewNotice extends BaseEntity {
  3. public NoticeCount data;
  4. public String resultCode;
  5. public String resultMsg;
  6. public NoticeCount getData() {
  7. return data;
  8. }
  9. public void setData(NoticeCount data) {
  10. this.data = data;
  11. }
  12. public String getResultCode() {
  13. return resultCode;
  14. }
  15. public void setResultCode(String resultCode) {
  16. this.resultCode = resultCode;
  17. }
  18. public String getResultMsg() {
  19. return resultMsg;
  20. }
  21. public void setResultMsg(String resultMsg) {
  22. this.resultMsg = resultMsg;
  23. }
  24. public static class NoticeCount {
  25. public int unreadCount;
  26. public int getUnreadCount() {
  27. return unreadCount;
  28. }
  29. public void setUnreadCount(int unreadCount) {
  30. this.unreadCount = unreadCount;
  31. }
  32. }
  33. }
  • 1
  • 解析方法(使用JessieApplication提供getObject()方法)
InterviewNotice interviewNotice = mApplication.getObject(response, InterviewNotice.class);
  • 1

PullToRefreshListView

  • Xml文件中声明
  1. <com.android.refresh.PullToRefreshListView
  2. android:id="@+id/id_empty_list"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"/>
  • 1
  • 代码中使用
  1. mPullableView = (PullToRefreshListView) findViewById(R.id.id_empty_list);
  2. mPullableView.setMode(PullToRefreshBase.Mode.BOTH);
  3. mPullableView.setOnRefreshListener(new RefreshListenerImpl());
  4. mAdapter = new PullableListViewAdapter(mContext);
  5. mPullableView.setAdapter(mAdapter);
  • 1
  • RefreshListenerImpl类
  1. public class RefreshListenerImpl implements PullToRefreshBase.OnRefreshListener2<ListView> {
  2. @Override
  3. public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
  4. mHandler.postDelayed(new Runnable() {
  5. @Override
  6. public void run() {
  7. // 处理下拉刷新逻辑
  8. ToastUtil.show(mContext, "下拉刷新");
  9. mPullableView.onRefreshComplete();
  10. }
  11. }, 3000);
  12. }
  13. @Override
  14. public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
  15. mHandler.postDelayed(new Runnable() {
  16. @Override
  17. public void run() {
  18. // 处理上拉加载逻辑
  19. ToastUtil.show(mContext, "上拉加载");
  20. mPullableView.onRefreshComplete();
  21. }
  22. }, 3000);
  23. }
  24. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/692506
推荐阅读
相关标签
  

闽ICP备14008679号