今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷。

首先我们要创建一个Andriod 项目

因为要从网络请求数据所以我们先来一个请求网络的共通类。

思路:

1.把请求网络的方法放到一个类里面

2.创建一个接口将数据发给Activity

3.Activity 实现接口获得服务器返回的数据

4.解析数据

来我们一先来看第一步

请求网络

在这里请求网络我们用Volley 。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。当然Volley对加载图片的时候内存控制的很好,后面加载图片还会用到。

创建一个CallWebservice 类

package org.shuaibi.hi_blog.utils;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry; import org.json.JSONObject; import android.content.Context;
import android.widget.Toast; import com.android.volley.RequestQueue;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley; public class CallWebservice { private final String HTTPHOST="http://blog.haojima.net/api/home/"; //主机地址
public static RequestQueue requestQueue;
private Context mContnxt;
private int mMark;
private ServiceCallBack mServiceCallBack; public CallWebservice(Context context,String function,HashMap<String, String> params,int mark)
{
this.mContnxt=context;
this.mMark=mark;
this.mServiceCallBack=(ServiceCallBack) context;
createUrl(function,params);
} public void createUrl(String function,HashMap<String, String> params)
{
//拼主机名和方法名 String url=this.HTTPHOST+function;
//拼参数 if(params!=null){
url+="?";
Iterator<Entry<String, String>> iterator = params.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, String> obj = (Entry<String, String>) iterator.next();
url+=obj.getKey().toString()+"="+obj.getValue().toString()+"&";
}
url=url.substring(0, url.length()-1); //去掉最后一个 &
}
//请求服务器 getJsonResult(url); } public void getJsonResult(String url)
{
if(CallWebservice.requestQueue==null)
{
requestQueue=Volley.newRequestQueue(mContnxt);
}
JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(url, null, new Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
mServiceCallBack.serviceResult(response, mMark);
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(mContnxt, error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
requestQueue.add(jsonObjectRequest);
}
}

下面来写接口

package org.shuaibi.hi_blog.utils;

import org.json.JSONObject;

/**

 * 

 * @描述: 服务器返回值回调

 * @作者: ZeroX

 * @时间: 2015-9-16

 * @参数: 

 * @接口: 

 *

 */
public interface ServiceCallBack {
void serviceResult(JSONObject jsonObject,int mark);
}

看见了接口的代码很简单就几句话, 里面的jsonObject 就是服务器返回值 mark 是标记当一个Activity里有多个请求网络的地方 我们就可以用mark 区分哈哈 。

这样请求网络就算完成了,下面介绍用法

HashMap<String, String> params=new HashMap<String, String>();
params.put("idex",mIndex+"");
params.put("sizePage", mPageSize+"");
params.put("ContentLength", "80");
new CallWebservice(this,"get",params,GETBLOGLIST);

上面代码就是调用一个 方法的写法  里面的GETBLOGLIST 是定义的一个常量我写的1,用来区分多个网络请求的这个数就是 上面接口里的mark

最后就是Activity实现 ServiceCallBack 这个接口了 实现一下serviceResult 这个方法

public class MainActivity extends Activity implements ServiceCallBack
@Override
public void serviceResult(JSONObject jsonObject, int mark) {
try {
switch (mark) {
case GETBLOGLIST:
blogResultHander(jsonObject.getJSONArray("blog"));
mPageCount=jsonObject.getInt("total");
break;
default:
break;
}
} catch (JSONException e) {
// TODO Auto-generated catch block e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block e.printStackTrace();
} }

最后就是解析Json了

/**

     * 博客列表返回值处理

     * @param jsonArray 博客列表

     */
public void blogResultHander(JSONArray jsonArray) throws Exception
{
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject=jsonArray.getJSONObject(i);
HashMap<String, String> itemHashMap=new HashMap<String, String>();
itemHashMap.put("UserName", jsonObject.getJSONObject("BlogUsersSet").getString("UserNickname"));
itemHashMap.put("CreateTime", jsonObject.getString("BlogCreateTime"));
itemHashMap.put("Title", jsonObject.getString("BlogTitle"));
itemHashMap.put("Content", jsonObject.getString("BlogContent"));
itemHashMap.put("Comment", jsonObject.getString("BlogCommentNum"));
itemHashMap.put("Visibility", jsonObject.getString("BlogReadNum"));
mBlogList.add(itemHashMap); //这是一个List<HashMap<String,String>>
} }

哈哈我们已经把 重服务器返回的数据放到List里了。

下次分享 怎么把列表显示出来哇咔咔。 上面代码只是提共参考哟 完整代码请点击这里

Android请求网络共通类——Hi_博客 Android App 开发笔记的更多相关文章

  1. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

  2. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  3. 我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!

    本文来自:http://blog.csdn.net/ouyang_peng/article/details/11358405 今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超 ...

  4. Android lifecyle 源码解剖 - gdutxiaoxu的博客(微信公众号 stormjun94)

    版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/gdutxiaoxu/article/det ...

  5. Android 程序员不得不收藏的个人博客(持续更新...)

    本文已收录我的 Github ,持续更新中 ,欢迎点赞 ! 每周打开一次收藏夹里的个人博客,已经成为了我的人生一大乐趣. 相比各大博客平台,我一直更加偏爱个人博客.在每个人自己的这一亩三分地里,你能看 ...

  6. [技术博客] Android 自动化测试

    [技术博客] Android 自动化测试 安卓自动化测试工具与平台的搭建 类似于网页端自动化,安卓测试的自动化也主要是针对控件的自动化.其原理就是通过python(其他语言) 的脚本来代替我们手动完成 ...

  7. [技术博客]Android 开发 Bug Log

    [技术博客] Android 开发 Bug Log 大大小小的bug,聪明的愚蠢的都有, 持续记录中...... java.lang.IllegalArgumentException: The sty ...

  8. 记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST_网络_c359719435的专栏-CSDN博客 https://blog.csdn.net/c359719435/article/details/80300433

    记一次压测问题定位:connection reset by peer,TCP三次握手后服务端发送RST_网络_c359719435的专栏-CSDN博客 https://blog.csdn.net/c3 ...

  9. SpringBoot技术栈搭建个人博客【前台开发/项目总结】

    前言:写前台真的是我不擅长的东西...所以学习和写了很久很久...前台页面大概开发了两天半就开发好了,采用的静态的html和bootstrap来写,写后台的时候纠结住了...怎么说呢,写页面真的是头疼 ...

随机推荐

  1. SQLSERVER走起微信公众帐号已经开通搜狗微信搜索

    SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...

  2. SQL数据库之DQL

    初来乍到,我是一个Java行业的小学生,刚学半年. 今天老师讲了数据库的操作语句,在这里与大家分享一下我学到的知识吧,要是有不足的地方麻烦大家指出来,共同进步,共同提高! 1.数据库中的各种符号 %: ...

  3. ASP.NET Core project.json imports 是什么意思?

    示例代码: "frameworks": { "netcoreapp1.0.0": { "imports" : "portable- ...

  4. 快递Api接口 & 微信公众号开发流程

    之前的文章,已经分析过快递Api接口可能被使用的需求及场景:今天呢,简单给大家介绍一下微信公众号中怎么来使用快递Api接口,来完成我们的需求和业务场景. 开发语言:Nodejs,其中用到了Neo4j图 ...

  5. isEmpty和isNull()区别

     isEmpty和isNull()区别一个NULL字符串一定是一个空串,一个空串未必是一个NULL字符串例如:QString().isNull():   //结果为trueQString().isEm ...

  6. 如何理解javaSript中函数的参数是按值传递

    本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...

  7. Register-SPWorkflowService 404

    最近需要做一个SharePoint 2013工作流演示环境. 于是在自己的本子上安装了一个虚拟机. 虚拟机操作系统是Windows Server 2012 R2,计划把AD.SQL Server 20 ...

  8. iOS开源项目周报1215

    由OpenDigg 出品的iOS开源项目周报第一期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. PY ...

  9. Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)

    作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...

  10. POJ1149 PIGS [最大流 建图]

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20662   Accepted: 9435 Description ...