Volley框架 xUtils 框架

Volley

Volley框架的工作機制
代碼中用到的是POST方法,寫了一個匿名內部類,複寫了一個protected Map

public class VolleyActivity extends Activity implements View.OnClickListener {
    private Button mButtonVolley;
    private Button mButtonImage;
    private TextView mTextViewConnect;
    private NetworkImageView mNetworkImageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_volley);
        mButtonVolley = (Button) findViewById(R.id.button_volley);
        mButtonImage = (Button) findViewById(R.id.button_image);
        mButtonVolley.setOnClickListener(this);
        mButtonImage.setOnClickListener(this);
        mTextViewConnect = (TextView) findViewById(R.id.textview_connect);
        mNetworkImageView = (NetworkImageView) findViewById(R.id.netimage);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.button_image:
                mNetworkImageView.setImageUrl("http://pic1.nipic.com/2008-09-08/200898163242920_2.jpg", MySingleton.getInstance(this).getImageLoader());
                break;
            case R.id.button_volley:
//                RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
                StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet", new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        mTextViewConnect.setText(response);
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        mTextViewConnect.setText("網絡連接錯誤");
                    }
                }){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        HashMap<String,String> map = new HashMap<>();
                        map.put("username","zhangsan");
                        return super.getParams();
                    }
                };
//                requestQueue.add(stringRequest);
                MySingleton.getInstance(getApplicationContext()).addToRequestQueue(stringRequest);
                break;
        }
    }
}

單例設計

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

    private MySingleton(Context context) {
        mCtx = 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(mCtx.getApplicationContext());
        }
        return mRequestQueue;
    }

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

    public ImageLoader getImageLoader() {
        return mImageLoader;
    }
}

xUtils

xUtils也是封裝好的一個東西,包含的內容很多,包括HttpUtils、ViewUtils、BitmapUtils、dbUtils.
使用時注意倒包。

HttpUtils

用於網絡連接,因爲是封裝好的,所以用起來比較方便。
同樣包含get和post兩種方法
可以利用反射機制,不需要寫findViewById,引入佈局文件的方法如下:@ViewInject(R.id.button_xutils_get)
ViewUtils.inject(this);

package com.example.administrator.networkdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;

/**
 * Created by Administrator on 2015/9/14.
 */
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_connect)
    private TextView mTextViewContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_xutils);
        ViewUtils.inject(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:
                HttpUtils client = new HttpUtils();
                client.send(HttpRequest.HttpMethod.GET, "http://www.360.com", new RequestCallBack<String>() {//第三個參數new RequestCallBack是對事件的監聽
                    @Override
                    public void onSuccess(ResponseInfo<String> responseInfo) {
                        mTextViewContent.setText(responseInfo.result);
                    }

                    @Override
                    public void onFailure(HttpException e, String s) {
//                        e.getExceptionCode();
                        mTextViewContent.setText("網絡連接錯誤");
                    }
                });
                break;
            case R.id.button_xutils_post:
                HttpUtils client2 = new HttpUtils();
                RequestParams params = new RequestParams();
                params.addBodyParameter("username","xutilspost");
                client2.send(HttpRequest.HttpMethod.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet", params, new RequestCallBack<String>() {
                    @Override
                    public void onSuccess(ResponseInfo<String> responseInfo) {
                        mTextViewContent.setText(responseInfo.result);
                    }

                    @Override
                    public void onFailure(HttpException e, String s) {
                        mTextViewContent.setText("網絡連接錯誤");
                    }
                });
                break;
        }
    }
}

dbUtils

利用xUtils還可以方便數據庫查找,具體方法如下:user是表名,my_first_db是數據庫名。
同樣注意倒包。

case R.id.button_select:
                DbUtils dbUtils = DbUtils.create(this,"my_first_db");
                try {
                    List<User> users = dbUtils.findAll(Selector.from(User.class));
                    for (User user:users){
                        Log.d("cursor","用戶名"+user.getName()+"   密碼"+user.getPassword());
                    }
                } catch (DbException e) {
                    e.printStackTrace();
                }
@Table(name = "user")
public class User {
    @Column(column = "id")
    private String id;
    private String name;
    private String password;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章