Android网络封装的示例分析(android,开发技术)

时间:2024-05-06 01:00:59 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

前言:

模拟用户登录,从安卓发送请求到服务端校验,再从服务端返回给安卓校验结果

1.在AndroidManifest.xml文件中添加网络权限

<uses-permissionandroid:name="android.permission.INTERNET"/>

所放位置如图所示:

Android网络封装的示例分析

2.添加依赖,在app模块下的build.gradle中添加okhttp和json的依赖

implementationgroup:'com.squareup.okhttp3',name:'okhttp',version:'4.9.0'implementation'com.alibaba:fastjson:1.2.10'

添加位置如图所示,添加之后点击Android网络封装的示例分析进行编译引入。

Android网络封装的示例分析

3.封装一个实体类,用于接收请求后的响应信息。(响应,包括响应码code和响应体body)

publicclassResponseBody{privateStringcode;//响应码privateObjectresult;//响应体publicStringgetCode(){returncode;}publicvoidsetCode(Stringcode){this.code=code;}publicObjectgetResult(){returnresult;}publicvoidsetResult(Objectresult){this.result=result;}}

4.封装一个实体类(User)

publicclassUser{privateintid;privateStringusername;privateStringpassword;privateStringphone;privateStringname;privateStringsex;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetPassword(){returnpassword;}publicvoidsetPassword(Stringpassword){this.password=password;}publicStringgetPhone(){returnphone;}publicvoidsetPhone(Stringphone){this.phone=phone;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetSex(){returnsex;}publicvoidsetSex(Stringsex){this.sex=sex;}}

5.定义OkHttp工具,包括get,post两种请求方式

importandroidx.annotation.NonNull;importcom.alibaba.fastjson.JSONObject;importjava.io.IOException;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;importokhttp3.Cookie;importokhttp3.CookieJar;importokhttp3.FormBody;importokhttp3.HttpUrl;importokhttp3.OkHttpClient;importokhttp3.Request;importokhttp3.Response;publicclassOkHttpUtils{privatestaticfinalStringBASE_URL="http://192.168.10.104:8080/";//地址privatestaticOkHttpClientclient=newOkHttpClient();privatestaticResponseBodyresponseBody;/**因为OkHttp自带cookie效果,在构造方法中进行初始化,使其生效*/publicOkHttpUtils(){finalMap<String,List<Cookie>>cookieStore=newHashMap<>();client=newOkHttpClient.Builder().cookieJar(newCookieJar(){@OverridepublicvoidsaveFromResponse(@NonNullHttpUrlhttpUrl,@NonNullList<Cookie>list){cookieStore.put(httpUrl.host(),list);}@NonNull@OverridepublicList<Cookie>loadForRequest(@NonNullHttpUrlhttpUrl){List<Cookie>cookies=cookieStore.get(httpUrl.host());returncookies==null?newArrayList<>():cookies;}}).build();}/***get请求,这里没加线程控制,如果有需要可以加一下*/publicstaticResponseBodyget(Stringurl){Requestrequest=newRequest.Builder().url(getAbsoluteUrl(url)).build();Responseresponse=null;try{response=client.newCall(request).execute();responseBody=dealResponse(response.body().string());}catch(IOExceptione){e.printStackTrace();}returnresponseBody;}/***post请求,参数是通过map键值对形式传递过来的*/publicstaticResponseBodypost(Stringurl,Map<String,Object>value){FormBodyformBody=dealFormBody(value);Requestrequest=newRequest.Builder().url(getAbsoluteUrl(url)).post(formBody).build();Responseresponse;try{response=client.newCall(request).execute();responseBody=dealResponse(response.body().string());}catch(IOExceptione){e.printStackTrace();}returnresponseBody;}/**将请求返回结果封装到ResponseBody*/publicstaticResponseBodydealResponse(Stringresult){ResponseBodyresponseBody=newResponseBody();JSONObjectjson=JSONObject.parseObject(result);responseBody.setCode(json.get("code")+"");responseBody.setResult(json.get("data"));returnresponseBody;}/*处理请求参数*/publicstaticFormBodydealFormBody(Map<String,Object>maps){FormBody.Builderbuilder=newFormBody.Builder();Set<String>keySet=maps.keySet();for(Iterator<String>iterator=keySet.iterator();iterator.hasNext();){Stringkey=iterator.next();builder.add(key,maps.get(key)+"");}returnbuilder.build();}/*将url拼接起来,封装成完整url*/privatestaticStringgetAbsoluteUrl(StringrelativeUrl){returnBASE_URL+relativeUrl;}}

6.定义好之后,测试访问

我在MainActivity中添加按钮进行的测试,具体界面就不一一介绍了,测试代码如下:

importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroidx.appcompat.app.AppCompatActivity;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importjava.util.HashMap;importjava.util.Map;importokhttp3.OkHttpClient;publicclassMainActivityextendsAppCompatActivity{privateOkHttpClientokHttpClient;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Buttonlogin=findViewById(R.id.login);//为界面上的按钮设置监听事件,点击就会调用下面的test方法login.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){test();}});}/**/publicvoidtest(){newThread(()->{Stringurl="user/info/getUser";Map<String,Object>maps=newHashMap<>();//将请求参数添加到map中maps.put("username","zhangsan");maps.put("password","123456");ResponseBodyresult=OkHttpUtils.post(url,maps);//传url参数和mapSystem.out.println(result.getCode());Useruser=dealJsonToObject(result);System.out.println(result.getResult());System.out.println(user.getPhone());}).start();}//处理json到实体类publicUserdealJsonToObject(ResponseBodyresult){JSONArrayarr=(JSONArray)JSONArray.parse(result.getResult().toString());JSONObjectjsonObject=arr.getJSONObject(0);Useruser=JSON.toJavaObject(jsonObject,User.class);returnuser;}}

7.服务器是由java编写

Android网络封装的示例分析

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Android网络封装的示例分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:java使用枚举封装错误码及错误信息的示例分析下一篇:

3 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18