第三十八天 網絡連接:Volley、xUtils

Volley

這裏寫圖片描述

需導入eu.the4thfloor.volley:com.android.volley:2015.05.28這個包

MainActivity(單例設計目的:每次請求時都生成同一個消息請求隊列,而沒有必要每次請求都生成一個新的消息隊列,)

public class VolleyActivity extends Activity implements View.OnClickListener{
    private TextView mTextViewVolley;
    private Button mButtonVolleyGet;
    private Button mButtonVolleyPost;
    private NetworkImageView mNetworkImageView;
    private Button mButtonGetImage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_volley);
        mTextViewVolley= (TextView) findViewById(R.id.textview_volley);
        mButtonVolleyGet= (Button) findViewById(R.id.button_volley_get);
        mButtonVolleyPost= (Button) findViewById(R.id.button_volley_post);
        mNetworkImageView= (NetworkImageView) findViewById(R.id.network_image);
        mButtonGetImage= (Button) findViewById(R.id.get_image);
        mButtonVolleyGet.setOnClickListener(this);
        mButtonVolleyPost.setOnClickListener(this);
        mButtonGetImage.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch(view.getId()){
        //沒使用單例前,每次請求都生成一個新的消息隊列
            case R.id.button_volley_get:
                RequestQueue queue= Volley.newRequestQueue(getApplicationContext());
                StringRequest request=new StringRequest(Request.Method.GET,"http://www.360.com", new Response.Listener<String>(){
                    @Override
                    public void onResponse(String response) {
                        mTextViewVolley.setText(response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        mTextViewVolley.setText("網絡連接錯誤");
                    }
                });
                queue.add(request);
                break;

        //使用單例,生成的消息隊列都是同一個消息隊列
            case R.id.button_volley_post:
                StringRequest request2=new StringRequest(Request.Method.POST,"http://192.168.0.85:8080/JavaEE/MyTestServlet", new Response.Listener<String>(){
                    @Override
                    public void onResponse(String response) {
                        mTextViewVolley.setText(response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        mTextViewVolley.setText("網絡連接錯誤");
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        HashMap<String,String> map=new HashMap<String, String>();
                        map.put("username","zhangsan");
                        map.put("password","123456");
                        return map;
                    }
                };
                MySingleton.getInstance(getApplicationContext()).addToRequestQueue(request2);
                break;
            case R.id.get_image:
                mNetworkImageView.setImageUrl("http://www.daxueit.com/upload/201408/13/101047281001237.png", MySingleton.getInstance(this).getImageLoader());
                break;
        }
    }
}

這裏寫圖片描述

網頁錯誤時:

這裏寫圖片描述
NetworkImageView

 <com.android.volley.toolbox.NetworkImageView
     android:id="@+id/network_image"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content">
 </com.android.volley.toolbox.NetworkImageView>

MySingleton(單例設計)

public class MySingleton {
    private static MySingleton mInstance;
    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;
    private static Context mContext;

    private MySingleton(Context context) {
        mContext= context;
        mRequestQueue = getRequestQueue();

        mImageLoader = new ImageLoader(mRequestQueue,
                new ImageLoader.ImageCache() {
                    private final LruCache<String, Bitmap>
                            cache = new LruCache<String, Bitmap>(20);

                    @Override
                    public Bitmap getBitmap(String url) {
                        return cache.get(url);
                    }

                    @Override
                    public void putBitmap(String url, Bitmap bitmap) {
                        cache.put(url, bitmap);
                    }
                });

    }

    public static synchronized MySingleton getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new MySingleton(context);
        }
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            // getApplicationContext() is key, it keeps you from leaking the
            // Activity or BroadcastReceiver if someone passes one in.
            mRequestQueue = Volley.newRequestQueue(mContext.getApplicationContext());
        }
        return mRequestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }

    public ImageLoader getImageLoader() {
        return mImageLoader;
    }
}

這裏寫圖片描述

服務器端:

這裏寫圖片描述

xUtils

public class XUtilsActivity extends Activity implements View.OnClickListener {
    @ViewInject(R.id.button_xutils_get)//註解
    private Button mButtonxUtilsGet;
    @ViewInject(R.id.button_xutils_post)
    private Button mButtonxUtilsPost;
    @ViewInject(R.id.textview)
    private TextView mTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xutils);
        ViewUtils.inject(this);//註解
//        mButtonxUtilsGet= (Button) findViewById(R.id.button_xutils_get);
//        mButtonxUtilsPost= (Button) findViewById(R.id.button_xutils_post);
//        mTextView= (TextView) findViewById(R.id.textview);
//        mButtonxUtilsGet.setOnClickListener(this);
//        mButtonxUtilsPost.setOnClickListener(this);//使用註解時,這些可以省略
    }


    @OnClick({R.id.button_xutils_get,R.id.button_xutils_post})
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button_xutils_get:
                doGet();
                break;
            case R.id.button_xutils_post:
                doPost();
                break;
        }
    }

    //xUtils的get方法
    public void doGet(){
        HttpUtils client=new HttpUtils();
        client.send(HttpRequest.HttpMethod.GET, "http://www.360.com", new RequestCallBack<String>() {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                mTextView.setText(responseInfo.result);
            }
            @Override
            public void onFailure(HttpException e, String s) {
                mTextView.setText("網絡連接錯誤");
            }
        });
    }

    //xUtils的post方法
    public void doPost(){
        HttpUtils clientpost=new HttpUtils();
        RequestParams params=new RequestParams();
        params.addBodyParameter("username","xutils");
        params.addBodyParameter("password","123");
        clientpost.send(HttpRequest.HttpMethod.POST, "http://192.168.0.85:8080/JavaEE/MyTestServlet", params, new RequestCallBack<String>() {
            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                mTextView.setText(responseInfo.result);
            }
            @Override
            public void onFailure(HttpException e, String s) {
                mTextView.setText("網絡連接錯誤");
            }
        });
    }
}

get:

這裏寫圖片描述

post:

這裏寫圖片描述

服務器端:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章