• Android请求网络共通类——Hi_博客 Android App 开发笔记


    今天 ,来分享一下 ,一个博客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里了。

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

  • 相关阅读:
    日月
    硕人
    式微
    芣苡
    樛木
    兔罝
    绿衣
    汉广
    小星
    惠子相梁
  • 原文地址:https://www.cnblogs.com/ismars/p/4827216.html
Copyright © 2020-2023  润新知