今天 ,來分享一下 ,一個博客App的開發過程,之前也沒開發過這種類型App 的經驗,求大神們輕點噴。java
首先咱們要建立一個Andriod 項目android
由於要從網絡請求數據因此咱們先來一個請求網絡的共通類。git
思路:json
1.把請求網絡的方法放到一個類裏面api
2.建立一個接口將數據發給Activity服務器
3.Activity 實現接口得到服務器返回的數據網絡
4.解析數據ide
來咱們一先來看第一步this
請求網絡url
在這裏請求網絡咱們用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裏了。
下次分享 怎麼把列表顯示出來哇咔咔。 上面代碼只是提共參考喲 完整代碼請點擊這裏