今天 ,来分享一下 ,一个博客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里了。
下次分享 怎么把列表显示出来哇咔咔。 上面代码只是提共参考哟 完整代码请点击这里