GithubHelp home page GithubHelp logo

hendyyou / andnet Goto Github PK

View Code? Open in Web Editor NEW

This project forked from qibin0506/andnet

0.0 2.0 0.0 435 KB

AndNet是一个Android开中中二次封装的网络框架

Home Page: http://blog.csdn.net/qibin0506/article/details/50127109

License: Apache License 2.0

Java 100.00%

andnet's Introduction

AndNet

AndNet是一个Android开中中二次封装的网络框架,可以任意轻松切换使用的底层网络请求框架,AndNet使用Parser-Callback模式,可以轻松实现从网络请求到数据解析的整个操作步骤。

AndNet的网络请求框架默认使用OkHttp,当然你完全可以轻松的实现自己的请求操作并且替换,而你的业务逻辑代码无需任何变动。

使用

1 初始化

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

       Net.init(new OkHttpStack());
       
    }
}

2 定义parser

public class CommParser<T> implements Net.Parser<T> {
	
	private String mKey;
	
	public CommParser(String key) {
		mKey = key;
	}

	@Override
	public Result<T> parse(String response) {
		Result<T> result = new Result<T>();
		try {
			JSONObject baseObject = JSON.parseObject(response);
			if(!baseObject.getBooleanValue("success")) {
				result.setMsg(baseObject.getString("message"));
			}else {
				Class<T> klass = Helper.generateType(getClass());
				if(klass == null) throw new Exception();
				
				T t = baseObject.getObject(mKey, klass);
				result.setStatus(Result.SUCCESS);
				result.setResult(t);
				return result;
			}
		} catch (Exception e) {
			e.printStackTrace();
			result.setMsg(Net.ERR_PARSE_MSG);
		}
		
		result.setStatus(Result.ERROR);
 		return result;
	}
}

3 get请求

Net.get("http://192.168.3.116/?name=loader&age=18&city=jinan",
                new CommParser<User>("user") {}, new Net.Callback<User>() {
            @Override
            public void callback(Result<User> result) {
                if(result.getStatus() == Result.SUCCESS) {
                    User user = result.getResult();

                    mTextView.setText(user.getName());
                    mTextView.append("\n" + user.getAge());
                    mTextView.append("\n" + user.getCity());
                }else {
                    mTextView.setText(result.getMsg());
                }
            }
        });

4 post请求

        User user = new User();
        user.setName("qibin");
        user.setCity("shandong");
        user.setAge(18);

        Net.post("http://192.168.3.116/", user, new CommParser<User>("user") {
                }, new Net.Callback<User>() {
                    @Override
                    public void callback(Result<User> result) {
                        if(result.getStatus() == Result.SUCCESS) {
                            mTextView.setText(result.getResult().toString());
                        }else {
                            mTextView.setText(result.getMsg());
                        }
                    }
                });

5 文件上传

        RequestParams params = new RequestParams("name", "qibin");
        params.add("file", new File(Environment.getExternalStorageDirectory()
                + "/dl.jar"));
        Net.post("http://192.168.3.116/upload.php", params, new Net.NoParser(),
                new Net.Callback<String>() {
            @Override
            public void callback(Result<String> result) {
                mTextView.setText(result.getResult() + "");
            }
        });

6 定制HttpStack

public class VolleyStack<T> extends AbsHttpStack<T> {

    private Application mContext;

    public VolleyStack(Application context) {
        mContext = context;
    }

    /**
     * get请求
     *
     * @param url      网址
     * @param parser   解析器
     * @param callback 回调
     */
    @Override
    public void get(String url, WeakReference<Net.Parser<T>> parser,
                    WeakReference<Net.Callback<T>> callback) {
        invoke(Request.Method.GET, url, null, parser, callback);
    }

    /**
     * post请求
     *
     * @param url      访问的url
     * @param params   post参数
     * @param parser   解析器
     * @param callback 回调
     */
    @Override
    public void post(String url, RequestParams params,
                     WeakReference<Net.Parser<T>> parser,
                     WeakReference<Net.Callback<T>> callback) {
        invoke(Request.Method.POST, url, params, parser, callback);
    }

    /**
     * 执行网络请求
     *
     * @param url
     * @param params   post时请求的参数 get时为null
     * @param parser
     * @param callback
     * @param method
     */
    private void invoke(final int method, final String url,
                        final RequestParams params,
                        final WeakReference<Net.Parser<T>> parser,
                        final WeakReference<Net.Callback<T>> callback) {
        StringRequest request = new StringRequest(method, url,
                new Response.Listener<String>() {
                    public void onResponse(String response) {
                        onNetResponse(parser, callback, response);
                    }
                }, new Response.ErrorListener() {
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
                onError(callback, Net.DEF_ERR_MSG);
            }
        }) {
            @Override
            protected Map<String, String> getParams()
                    throws AuthFailureError {
                if (params != null) return params.get();
                return super.getParams();
            }
        };

        VolleyManager.getInstance(mContext).add(request);
    }

    @Override
    public void cancel(String tag) {
        VolleyManager.getInstance(mContext).cancel(tag);
    }
}

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Net.init(new VolleyStack(this));
//        Net.init(new OkHttpStack());
//        Net.init(new OkHttpHeaderStack());
    }
}

更多内容请操作实例代码和博客:http://blog.csdn.net/qibin0506/article/details/50127109

andnet's People

Contributors

qibin0506 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.