android-实例-网络互交-post get请求(依赖okhttp)
我的实例仅供参考配置配置1-权限在AndroidManifest.xml中配置uses-permission android:nameandroid.permission.INTERNET /配置2-下载关联相关包插件记得同步更新操作implementation com.squareup.okhttp3:okhttp:3.5.0 implementation com.squareup.okio:okio:1.11.0 implementation com.google.code.gson:gson:2.9.0在工程下新建文件夹network新建类HttpClient.java类import okhttp3.OkHttpClient; public class HttpClient { private OkHttpClient client;//网络请求对象 /** * 私有的构造器 在HttpClient实例化后 创建OkHttpClient对象 * 用于网络的请求 */ private HttpClient(){ client new OkHttpClient.Builder() .writeTimeout(80, TimeUnit.SECONDS) .connectTimeout(80,TimeUnit.SECONDS) .readTimeout(80,TimeUnit.SECONDS) .build(); } private static class SingleTon{ public static final HttpClient INSTANCE new HttpClient(); } /** * 获取单例 * return */ public static HttpClient getInstance(){ return SingleTon.INSTANCE; } /** * 获取OkHttpClient * return */ public OkHttpClient getClient() { return client; } }HttpCode.java类实例中几乎没有用以后备用public class HttpCode { public static final String FAILURE 失败; public static final String SUCCESS 成功; public static final int ERROR 0;//错误 public static final int HOME 1;//请求首页的数据 public static final int DETAILS 2;//请求详情的数据 public static final int SHOP_TYPE 3;//请求首页推荐分类的数据 public static final int SHOP_LIST 4;//请求分类商品的数据 public static final int TYPE_NAME 5;//请求分类列表的数据 public static final int START_PAGE 1;//起始页数 public static final int RANDOM_PAGE 3;//随机页数 public static final int PAGE_ROW 10;//数据条数 public static final String ROW row;//请求参数row public static final String PAGE page;//请求参数page public static final int DOWN_REFRESH 101;//刷新 public static final int DOWN_INIT 102;//初始化界线 public static final int DOWN_MORE 103;//加载更多 public static final int LOGIN701; //请求登录 public static final int SYNC_ASMPLE 1; public static final int SYNC_REGION 2; public static final int SYNC_ORG 3; }HttpUtils.java(实用工具类) 本工具就连2方法post 和get尽量压缩程序理解简单。import android.annotation.SuppressLint; import android.content.Context; import android.os.Handler; import android.util.Log; import java.io.IOException; import java.util.Iterator; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class HttpUtils { /*POST请求网络数据*/ // /*登录URL: http://101.43.53.57.62248/login2 Content-Type:application/json-patchjson 请求参数Body JSON { username: fengxian, password: 123456, clientId: Rx-BnCSr2eUHCwR }*/ public static void HttpPost_LoginAndGetToken(final Handler handler, final int requestCode) { String target http://101.43.53.57:62248/login2; //登录请求 同时获取token码 String username fengxian; String password 123456; String clientId Rx-BnCSr2eUHCwR; String jsonBody String.format({\username\:\%s\,\password\:\%s\,\clientId\:\%s\}, username, password, clientId); RequestBody body RequestBody.create(MediaType.parse(application/json; charsetutf-8), jsonBody); //获取一个请求对象 Request request new Request.Builder().url(target).post(body).addHeader(Content-Type, application/json).build(); HttpClient.getInstance().getClient().newCall(request).enqueue(new Callback() { //请求失败时的回调方法 Override public void onFailure(Call call, IOException e) { //将错误结果发送给Handler对象然后由handleMessage()方法处理 Log.e(HttpUtils-HttpPost, onFailure: 登录-请求Post失败); handler.obtainMessage(requestCode, e.getMessage()).sendToTarget(); } //请求成功时的回调方法 Override public void onResponse(Call call, Response response) throws IOException { //将获取的结果发送给Handler对象然后由handleMessage()方法处理 Log.e(HttpUtils-HttpPost, onResponse: 登录-请求Post成功); //Log.e(HttpUtils-HttpPost, onResponse: response.body().string()); handler.obtainMessage(requestCode, response.body().string()).sendToTarget(); } }); } // /** * Get请求网络数据 */ public static void HttpGet_GetItemCurveList(final Handler handler, final int requestCode,final String token ){ /* //拉取曲线数据 登录URL: http://101.43.53.57.62248/ar/curve/mylistall MethodGET 是否鉴权是Bearer Token权限标识ar:curve:all:list:isused ⽆权限会返回403 并携带 token 123456789.....; */ String target http://101.43.53.57:62248/ar/curve/mylistall; final Request request new Request.Builder() .url(target) .addHeader(Authorization, Bearer token) .addHeader(Content-Type, application/json) .get() .build(); //获取一个请求对象 HttpClient.getInstance().getClient().newCall(request).enqueue(new Callback() { SuppressLint(LongLogTag) Override public void onFailure(Call call, IOException e) { //请求失败时的回调方法 //将错误结果发送给Handler对象然后由handleMessage()方法处理 Log.e(mytest1_HttpUtils-HttpGet, onFailure: 请求失败); handler.obtainMessage(HttpCode.ERROR,e.getMessage()).sendToTarget(); } SuppressLint(LongLogTag) Override public void onResponse(Call call, Response response) throws IOException { //请求成功时的回调方法 //将获取的结果发送给Handler对象然后由handleMessage()方法处理 Log.e(mytest1_HttpUtils-HttpGet, onFailure: 请求成功); handler.obtainMessage(requestCode,response.body().string()).sendToTarget(); } }); } // }最初需求1-POST共2个程序直接调用HttpUtils类中的HttpPost_LoginAndGetToken方法完成建议在跳出对话框线程中使用post请求HttpUtils.HttpPost_LoginAndGetToken(handler,HANDLER_CODE_HTTP_LOGIN_AND_GETTOKEN); //HANDLER_CODE_HTTP_LOGIN_AND_GETTOKEN 为 handler接收码自定义最终请求的数据在handler中接收处理private Handler handler new Handler(new Handler.Callback() { Override public boolean handleMessage(Message msg) { switch (msg.what){ case HANDLER_CODE_HTTP_LOGIN_AND_GETTOKEN: { //okhttp3登录请求 同时获取token码 ok //接收HttpUtils.HttpPost_LoginAndGetToken()返回的结果 String jsonStr (String)msg.obj; if( jsonStr.contains(ok) || jsonStr.contains(success)){ Log.e(TAG, handleMessage: 登录请求 返回结果--成功); Gson gson new Gson(); BeanToken beanToken gson.fromJson(jsonStr,BeanToken.class); token1 beanToken.getData(); Log.e(TAG, handleMessage: token1 token1); } else{Log.e(TAG, handleMessage: 登录请求 返回结果--失败);} break; } // default:break; } return false; } });最后获取token码最初需求2-GET 带token码的请求共2个程序直接调用HttpUtils类中的HttpPost_LoginAndGetToken方法完成建议在跳出对话框线程中使用Get请求HttpUtils.HttpGet_GetItemCurveList(handler, HANDLER_CODE_HTTP_GET_ITEM_CURVE_LIST, token1); //token1参数为需求1-POST所获取//HANDLER_CODE_HTTP_GET_ITEM_CURVE_LIST 为 handler接收码自定义最终请求的数据在handler中接收处理参考最初需求1-POST持续更新