Android請求網絡共通類——Hi_博客 Android App 開發筆記

今天 ,來分享一下 ,一個博客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裏了。

下次分享 怎麼把列表顯示出來哇咔咔。 上面代碼只是提共參考喲 完整代碼請點擊這裏 

相關文章
相關標籤/搜索