Android二次封装的网络框架 AndNet

AndNet

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

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

更新日志

0.1.2版本更新

加入put、delete请求的支持 可直接post、put一段json cancel加入stack为空判断

0.1.1版本更新

加入debug 修复WeakReference带来的问题 重用网络框架的cancel功能,加入tag标识 使用

1 初始化

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        OkHttpStack okHttpStack = new OkHttpStack();
        okHttpStack.debug(true);
        Net.init(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());
                 }
             }
         }, getClass().getName());

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());
                         }
                     }
                 }, getClass().getName());

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() +  "" );
             }
         }, getClass().getName());

cancel

class  MyActivity extend Activity {

     @Override
     public  void  onDestroy() {
         Net.cancel(getClass().getName());
     }
}

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, Net.Parser<T> parser,
                     Net.Callback<T> callback,  final  Object tag) {
         invoke(Request.Method.GET, url,  null , parser, callback, tag);
     }

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

     /**
      * 执行网络请求
      *
      * @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  Net.Parser<T> parser,
                         final  Net.Callback<T> callback,
                         final  Object tag) {
         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, tag);
     }

     @Override
     public  void  cancel(Object 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/50127223

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值