android 封装网络框架(java企业自己封装的框架)

Android网络框架OKGo封装本文讲述了Android网络框架OKGo封装,封装的框架适用于项目当中,适合新手操作,OKGO框架本身就以简单易上手而深受喜欢,而此文就是基于框架之上再次封装,废话不多说,直接开始吧!首先在我们的build.gradle中导入我们引用的框架dependencies{…implementation’com.lzy.net:okgo:3.0.4’i…

大家好,又见面了,我是你们的朋友全栈君。

Android网络框架OKGo封装

本文讲述了Android网络框架OKGo封装,封装的框架适用于项目当中,适合新手操作,OKGO框架本身就以简单易上手而深受喜欢,而此文就是基于框架之上再次封装,废话不多说,直接开始吧!

首先在我们的build.gradle中导入我们引用的框架

dependencies { 
   
...
implementation 'com.lzy.net:okgo:3.0.4'
implementation 'com.lzy.net:okserver:2.0.5'
...
}

下来就要在我们创建的Application文件中对OKGo进行相应的配置:
这里只进行简单的配置操作,如果想配置其他,可在网上查阅相关资料,在创建的Application文件的onCreate()方法实现初始化方法即可。

private void initOKGO() { 
   
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor("OkGo");
    loggingInterceptor.setPrintLevel(HttpLoggingInterceptor.Level.BODY);
    loggingInterceptor.setColorLevel(Level.INFO);
    builder.addInterceptor(loggingInterceptor);
    builder.readTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
    builder.writeTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
    builder.connectTimeout(OkGo.DEFAULT_MILLISECONDS, TimeUnit.MILLISECONDS);
    builder.cookieJar(new CookieJarImpl(new DBCookieStore(this)));
    HttpsUtils.SSLParams sslParams1 = HttpsUtils.getSslSocketFactory();
    builder.sslSocketFactory(sslParams1.sSLSocketFactory, sslParams1.trustManager);
    OkGo.getInstance().init(this)
            //设置OkHttpClient
            .setOkHttpClient(builder.build())
            //全局统一缓存模式
            .setCacheMode(CacheMode.NO_CACHE)
            //全局统一缓存时间
            .setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE)
            //全局统一超时重连次数
            .setRetryCount(3);
}

有时候我们的需求是在网络请求中,我们需要给用户展示一个loading等待框,提示用户正在进行网络请求操作,下来我们就展示等待提示的代码:
DialogJsonCallback

public class DialogJsonCallback extends StringCallback { 
   


    private AlertDialog alertDialog;
    private Activity    activity;

    public DialogJsonCallback() { 
   

    }

    public DialogJsonCallback(Activity activity) { 
   
        super();
        initDialog(activity);
    }

    private void initDialog(Activity activity) { 
   

        AlertDialog.Builder builder = new AlertDialog.Builder(activity, R.style.matching_dialog);
        this.activity = activity;
        alertDialog = builder.create();
        alertDialog.setCanceledOnTouchOutside(false);
        alertDialog.setCancelable(false);
        activity.setFinishOnTouchOutside(false);
        View view = LayoutInflater.from(activity).inflate(R.layout.matching_dialog_layout, null);
        alertDialog.setView(view);
    }

    @Override
    public void onStart(Request<String, ? extends Request> request) { 
   
        super.onStart(request);
        if (alertDialog != null && !alertDialog.isShowing()) { 
   
            alertDialog.show();
            alertDialog.getWindow().setContentView(R.layout.matching_dialog_layout);

        }
    }

    @Override
    public void onFinish() { 
   
        super.onFinish();
        if (activity != null) { 
   
            if (!activity.isDestroyed()) { 
   
                if (alertDialog != null && alertDialog.isShowing()) { 
   
                    alertDialog.dismiss();
                }
            }
        }
    }

    @Override
    public void onSuccess(Response<String> response) { 
   

    }
}

其中的样式代码为:
R.style.matching_dialog

<style name="matching_dialog" parent="@android:style/Theme.Holo.Dialog">

    <!-- 是否有边框 -->
    <item name="android:windowFrame">@null</item>    <!--是否在悬浮Activity之上  -->
    <item name="android:windowIsFloating">true</item>    <!--标题  -->
    <item name="android:windowNoTitle">true</item>    <!--阴影  -->
    <item name="android:windowIsTranslucent">true</item>    <!--透明背景-->
    <item name="android:background">@android:color/transparent</item>    <!--窗口背景透明-->
    <item name="android:windowBackground">@android:color/transparent</item>    <!--弹窗背景是否变暗-->
    <item name="android:backgroundDimEnabled">false</item>


</style>

用到的布局文件为:
布局文件为一个简单的.gif图提示用户
R.layout.matching_dialog_layout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/logout_bg_round">

        <pl.droidsonroids.gif.GifImageView
            android:id="@+id/gif_icon_matching"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:src="@mipmap/icon_matching"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="12dp"
            android:text="@string/in_the_match"
            android:textColor="@color/black"
            android:textSize="14sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/gif_icon_matching"/>

</androidx.constraintlayout.widget.ConstraintLayout>

下来就是对OKGO框架进行网络请求的封装:

首先我们先定义网络请求回传的接口,当网络请求成功或失败时,对返回数据进行回调:

HttpRquestInter

public interface HttpRequestInter<T> { 
   


    void onError(String des);

    void onResponse(T responseObj);
}

下来我们封装OKGo的网络请求操作,包括get,post,以及文件上传:

public class HttpRequest { 
   

/** * OKGo Get请求 * @param url * @param params * @param classz * @param requestInter * @param <T> */
public static <T> void getRequets(Activity activity, String url, Map<String, String> params, final Class classz, final HttpRquestInter<T> requestInter) { 
   
  
  OkGo.<T>get(url)
            .headers("公共请求头部", " ")
            .headers("公共请求头部", " ")
            .params(params)
            .execute((Callback<T>) new DialogJsonCallback(activity) { 
   
                @Override
                public void onError(Response<String> response) { 
   
                    try { 
   
                        requestInter.onError(response.body());
                    } catch (Exception e1) { 
   
                        e1.printStackTrace();
                    }
                }

                @Override
                public void onSuccess(Response<String> response) { 
   
                //请求返回数据可根据需求更改判断
                   requestInter.onResponse((T) new Gson().fromJson(response.body(), classz));
       }
            });
}


/** * OKGo post请求 * @param url * @param params * @param classz * @param requestInter * @param <T> */
public static <T> void postRequest(Activity activity, String url, Map<String, String> params, final Class classz, final HttpRquestInter<T> requestInter) { 
   

  OkGo.<T>post(url)
            .headers("公共请求头部", "")
            .headers("公共请求头部", "")
            .params(params)
            .execute((Callback<T>) new DialogJsonCallback(activity) { 
   
                @Override
                public void onError(Response<String> response) { 
   
 
                    try { 
   
                        requestInter.onError(response.body());
                    } catch (Exception e1) { 
   
                        e1.printStackTrace();
                    }
                }

                @Override
                public void onSuccess(Response<String> response) { 
   
                //请求返回数据可根据需求更改判断
                   requestInter.onResponse((T) new Gson().fromJson(response.body(), classz));
             }
            });
}


/** * OKGo 文件上传 * @param url * @param files * @param classz * @param requestInter * @param <T> */
public static <T> void fileUpload(Activity activity, String url, String fileKey, File files, String fileName, final Class classz, final HttpRquestInter<T> requestInter) { 
   
    HttpParams httpParams = new HttpParams();
    httpParams.put(fileKey, files, fileName);
    OkGo.<T>post(url)
            .headers("公共请求头部", "")
            .headers("公共请求头部", "")
            .params(httpParams)
            .isMultipart(true)
            .execute((Callback<T>) new DialogJsonCallback(activity) { 
   
                @Override
                public void onError(Response<String> response) { 
   
                  
                    try { 
   
                        requestInter.onError(response.body());
                    } catch (Exception e1) { 
   
                        e1.printStackTrace();
                    }
                }

                @Override
                public void onSuccess(Response<String> response) { 
   
                  //请求返回数据可根据需求更改判断
                   requestInter.onResponse((T) new Gson().fromJson(response.body(), classz));
                     }
            });
}

}

我们可以创建一个公共的类来整理我们的网络请求参数

public class RequestBodyManager { 
   
 
 //登录
 public static Map<String, String> buildLoginPostParam(String userName, String passWord) { 
   
    Map<String, String> defaults = new HashMap<>();
    defaults.put("userName", userName;
    defaults.put("passWord", passWord);
    return defaults;
}

}

最后我们演示一下模拟登录的代码:


public void loginPost(String userName, String passWord) { 
   

    Map<String, String> loginMap = RequestBodyManager.buildLoginPostParam(userName, passWord);
    HttpRequest.postRequest(getView(), Constants.LOGIN, loginMap, LoginResponse.class, new HttpRquestInter<LoginResponse>() { 
   
        @Override
        public void onError(String des) { 
   
            getView().loginFailure(des);
        }

        @Override
        public void onResponse(LoginResponse responseObj) { 
   
            getView().loginSuccess(responseObj);
        }
    });
}

其中的getView()方法就是获取当前界面的Context,可以参考我之前的封装MVP代码。
最后把LoginResponse.class的代码也贴出来,可以根据这个更改。

LoginResponse

public class LoginResponse extends BaseModel<LoginInfo> { 
   
}

只是简单的这一行代码,LoginInfo根据自己项目需求更改。

其中Get和Post的代码大概一致,下来讲述一下文件上传:

public void uploadFile(String fileKey, File file, String fileName) { 
   

    HttpRequest.fileUpload(getView(), Constants.CHANGE_PHOTO, fileKey, file, fileName, UploadResponse.class, new HttpRquestInter<UploadResponse>() { 
   
        @Override
        public void onError(String des) { 
   
            getView().uploadPhotoFail(des);
        }

        @Override
        public void onResponse(UploadResponse responseObj) { 
   
            if (responseObj.status) { 
   
                getView().uploadPhotoSuccess(responseObj);
            } else { 
   
                getView().uploadPhotoFail(responseObj.errors);
            }
        }
    });

}

以上就是封装OKGO的全部内容,如有不足之处,还请各位包涵!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128656.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • eclipse代码自动补全设置_eclipse怎么运行安卓项目

    eclipse代码自动补全设置_eclipse怎么运行安卓项目打开Eclipse->Window->Perferences->Java->Editor->Content,最下面一栏auto-Activation会看到只有一个”.”存在。表示:只有输入”.”之后才会有代码提示,我们要修改的地方就是这里,可是Eclipse默认只允许输入4个自定义字符。先把上图中”.”的地方输入几个随便的字符,例如”aaaa…

    2022年10月15日
  • eclipse没有server项,解决办法「建议收藏」

    eclipse集成Tomcat:   打开eclipse-窗口-首选项-服务器-运行时环境找到Tomcat然后添加。eclipse添加插件:   开发WEB项目时要集成Tomcat可以并不是所有的eclipse都有服务器选项,如果不幸你的正好没有,不要怕。首先我们打开eclipse-help-installnewsoftware然后在workwith中输…

  • 手动清除fun.xls.exe病毒的方法[通俗易懂]

    手动清除fun.xls.exe病毒的方法[通俗易懂](无法显示隐藏文件以及无法双击打开分区)用杀毒软件杀毒,所有驱动盘上的文件夹表现为不可见,实际为文件夹隐藏了。如何判断是中了该种病毒,可以通过在命令行下键入:cdC:’dir/ah如果有fun.x

  • JavaScript 算法 — 贪心算法

    JavaScript 算法 — 贪心算法文章目录贪心算法例题一:分饼干例题二:买卖股票的最佳时机II贪心算法贪心算法是算法设计的一种方法。期盼通过每个阶段的局部最优选择,从而达到全局的最优,但最后的结果不一定最优。例题一:分饼干 /** *@param{number[]}g胃口 *@param{number[]}s饼干尺寸 *@return{number} */ varfindContentChildren=function(g,s){ constmysort=(a,

  • oracle拼接字符串函数_Oracle字符串转换为数值

    oracle拼接字符串函数_Oracle字符串转换为数值1.使用“||”进行字符串拼接。select’a’||’b’||’c’fromdual;’A’||’B’||’C’—————-abc2.使用CONCAT()函数进行字符串拼接。selectconcat(‘a’,’b’)fromdual;CONCAT(‘A’||’B’)—————–ab如果CONCAT中连接的值不是字符…

  • Centos7安装Promethus(普罗米修斯)监控系统完整版

    Centos7安装Promethus(普罗米修斯)监控系统完整版相关博文:1、Centos7安装Promethus(普罗米修斯)监控系统完整版2、Promethus(普罗米修斯)监控Mysql数据库3、Promethus(普罗米修斯)安装Grafana可视化图形工具4、Promethus的Grafana图形显示MySQL监控数据5、Promethus(普罗米修斯)的Grafana+onealert实现报警功能目录一、普罗米修斯…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号