iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 网络请求方式
  • 761
分享到

Android 网络请求方式

android 2023-09-21 16:09:29 761人浏览 安东尼
摘要

前言 最近需要将Android 项目接入物联网公司提供的接口,所以顺便给大家分享一下Android中我们常用的网络请求吧!提醒大家一下,我们遇到接口需求,一定要先在Postman上测试接口是否正确,然后再去项目上写程序来请求接口;否则,请求

前言

最近需要将Android 项目接入物联网公司提供的接口,所以顺便给大家分享一下Android中我们常用的网络请求吧!提醒大家一下,我们遇到接口需求,一定要先在Postman上测试接口是否正确,然后再去项目上写程序来请求接口;否则,请求出问题,你都不确定是你程序写的有问题还是接口本身提供的有问题。

Android网络请求程序演练

HttpUrlConnection

这是 Android 中最常用的网络请求方式,可以通过该类建立连接并进行 HTTP 请求和响应的读写操作。使用简单,支持多种数据格式。

GET请求

public void sendGetRequest() {    String url = "http://example.com/api/getData";    HttpURLConnection connection = null;    try {        URL requestUrl = new URL(url);        connection = (HttpURLConnection) requestUrl.openConnection();        connection.setRequestMethod("GET");        // 添加header        connection.setRequestProperty("Content-Type", "application/JSON");        connection.setRequestProperty("Accept", "application/json");        // 设置连接和读取超时时间        connection.setConnectTimeout(8000);        connection.setReadTimeout(8000);        int responseCode = connection.getResponseCode();        if (responseCode == 200) { // 请求成功            InputStream inputStream = connection.getInputStream();            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));            StringBuilder builder = new StringBuilder();            String line;            while ((line = reader.readLine()) != null) {                builder.append(line);            }            String response = builder.toString();            Log.d(TAG, "response: " + response);        } else { // 请求失败            Log.e(TAG, "Error response code: " + responseCode);        }    } catch (Exception e) {        e.printStackTrace();    } finally {        if (connection != null) {            connection.disconnect();        }    }}

其中,我们使用HttpURLConnection的openConnection()方法打开一个连接,然后设置请求方式为GET,再添加headers,设置连接和读取超时时间,最后通过getResponseCode()方法获取响应码,如果是200则表示请求成功,接着就可以获取响应数据了。

POST请求

public class MainActivity extends AppCompatActivity {        private EditText editText;    private TextView textView;    private String url = "http://example.com/api";        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                editText = findViewById(R.id.editText);        textView = findViewById(R.id.textView);                Button button = findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                String postData = editText.getText().toString().trim();                if (!TextUtils.isEmpty(postData)) {                    new PostTask().execute(postData);                } else {                    Toast.makeText(MainActivity.this, "请输入内容", Toast.LENGTH_SHORT).show();                }            }        });    }        private class PostTask extends AsyncTask {        @Override        protected String doInBackground(String... params) {            try {                URL reqUrl = new URL(url);                HttpURLConnection conn = (HttpURLConnection) reqUrl.openConnection();                conn.setReadTimeout(10000);                conn.setConnectTimeout(15000);                conn.setRequestMethod("POST");                conn.setDoInput(true);                conn.setDoOutput(true);                conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");                OutputStream outputStream = conn.getOutputStream();                outputStream.write(params[0].getBytes("UTF-8"));                outputStream.flush();                outputStream.close();                int responseCode = conn.getResponseCode();                if (responseCode == HttpURLConnection.HTTP_OK) {                    InputStream inputStream = conn.getInputStream();                    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));                    StringBuilder response = new StringBuilder();                    String line = null;                    while ((line = reader.readLine()) != null) {                        response.append(line);                    }                    reader.close();                    inputStream.close();                    return response.toString();                }            } catch (Exception e) {                e.printStackTrace();            }            return null;        }                @Override        protected void onPostExecute(String result) {            if (result != null) {                textView.setText(result);            } else {                Toast.makeText(MainActivity.this, "请求出错", Toast.LENGTH_SHORT).show();            }        }    }}

Volley

Volley 是 Google 推出的一款网络请求框架,专门用于简化 Android 应用开发中的网络请求,具有自动请求队列、网络请求缓存、图片加载等功能。

GET请求

// 创建一个 RequestQueue 对象RequestQueue queue = Volley.newRequestQueue(this);// 指定请求的 URLString url = "https://www.example.com/api/get_data";// 创建一个 StringRequest 对象StringRequest stringRequest = new StringRequest(Request.Method.GET, url,        new Response.Listener() {            @Override            public void onResponse(String response) {                // 响应成功时的回调函数                Log.d(TAG, "Response: " + response);            }        }, new Response.ErrorListener() {            @Override            public void onErrorResponse(VolleyError error) {                // 响应失败时的回调函数                Log.e(TAG, "Error: " + error.getMessage());            }        });// 将 StringRequest 对象添加到 RequestQueue 中queue.add(stringRequest);

POST请求

RequestQueue queue = Volley.newRequestQueue(this);String url = "http://your-url.com/post-endpoint";StringRequest postRequest = new StringRequest(Request.Method.POST, url,     new Response.Listener()     {        @Override        public void onResponse(String response) {            // 处理响应        }    },     new Response.ErrorListener()     {         @Override         public void onErrorResponse(VolleyError error) {             // 处理错误         }    }) {         @Override    protected Map getParams()     {          // 请求参数        Map params = new HashMap();          params.put("param1", "value1");          params.put("param2", "value2");          return params;      }    @Override    public Map getHeaders() throws AuthFailureError {        Map headers = new HashMap();        // 添加headers        headers.put("Authorization", "Bearer your-access-token");        return headers;    }};queue.add(postRequest);

Retrofit

Retrofit 是一个基于 OkHttp 的类型安全的 RESTful 客户端,可以使用注解的方式实现接口的定义,高效易用,支持多种数据格式。

GET请求

添加Retrofit依赖项:在您的Android项目中的build.gradle文件中添加以下依赖项:

dependencies {    implementation 'com.squareup.retrofit2:retrofit:2.9.0'    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'}

创建Retrofit实例:在您的Java类中创建Retrofit实例。

Retrofit retrofit = new Retrofit.Builder()         .baseUrl("https://yourapi.com/")         .addConverterFactory(GsonConverterFactory.create())         .build();

创建API接口:创建一个Java接口,其中定义GET请求以及其参数和返回类型。

public interface YourApiService {    @GET("your_api_path")    Call getYourApiData(@Query("your_param_name") String yourParamValue);}

发送GET请求:在您的Java类中使用Retrofit实例创建API服务实例,并发送GET请求。这可以在Activity或Fragment中完成,也可以使用ViewModel和LiveData进行MVVM架构

YourApiService apiService = retrofit.create(YourApiService.class);Call call = apiService.getYourApiData("your_param_value");call.enqueue(new Callback() {     @Override      public void onResponse(Call call, Response response) {           // 处理响应      }     @Override     public void onFailure(Call call, Throwable t) {           // 处理失败     }});

在上面的代码中,我们使用enqueue()方法异步发送GET请求,并在回调方法中处理响应。我们可以在onResponse()方法中处理成功的响应,并在onFailure()方法中处理失败的响应。

POST请求

使用Retrofit发送POST请求需要创建一个接口,接口中定义请求的参数和返回值类型,在方法上使用@POST注解,并且指定请求的URL,参数使用@Body注解标识。下面是一个简单的示例:

首先,添加Retrofit的依赖:

implementation 'com.squareup.retrofit2:retrofit:2.9.0'

然后,定义一个接口,例如:

public interface ApiInterface {    @POST("login")    Call login(@Body LoginRequest request);}

其中,@POST("login")表示请求的URL为"login",@Body LoginRequest request表示请求的参数为一个LoginRequest对象。

接下来,创建一个Retrofit实例,并调用接口中的请求方法,例如:

//创建Retrofit实例Retrofit retrofit = new Retrofit.Builder()        .baseUrl(BASE_URL)        .addConverterFactory(GsonConverterFactory.create())        .build();//创建接口实例ApiInterface apiInterface = retrofit.create(ApiInterface.class);//创建请求对象LoginRequest request = new LoginRequest("username", "passWord");//发送请求Call call = apiInterface.login(request);call.enqueue(new Callback() {    @Override    public void onResponse(Call call, Response response) {        //请求成功处理逻辑    }    @Override    public void onFailure(Call call, Throwable t) {        //请求失败处理逻辑    }});

其中,BASE_URL需要替换为你的服务器地址,LoginRequest为请求参数的实体类,例如:

public class LoginRequest {    private String username;    private String password;    public LoginRequest(String username, String password) {        this.username = username;        this.password = password;    }    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

以上就是通过Retrofit发送POST请求的基本流程。

OkHttp

OkHttp 是一个高效的 HTTP 客户端,支持 HTTP/2 和持久连接,可以用于替代 HttpUrlConnection 和 Volley。

GET请求

OkHttpClient client = new OkHttpClient();Request request = new Request.Builder()        .url("https://www.example.com/get")        .build();try {    Response response = client.newCall(request).execute();    String responseData = response.body().string();    Log.d(TAG, "onResponse: " + responseData);} catch (IOException e) {    e.printStackTrace();}

POST请求

以下是一个使用OkHttp同步发送POST请求的示例代码:

OkHttpClient client = new OkHttpClient();// 构造请求体,这里使用JSON格式String json = "{\"username\":\"admin\",\"password\":\"123456\"}";RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), json);// 构造请求对象Request request = new Request.Builder()        .url("http://www.example.com/login") // 请求URL        .addHeader("Content-Type", "application/json") // 设置请求头        .post(requestBody) // 设置请求体        .build();// 创建Call对象并发起请求Call call = client.newCall(request);Response response = call.execute();// 解析响应结果String result = response.body().string();

需要注意的是,如果请求过程需要很长时间,建议使用enqueue方法异步发起请求,避免阻塞主线程。例如:

OkHttpClient client = new OkHttpClient();// 构造请求体String json = "{\"username\":\"admin\",\"password\":\"123456\"}";RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), json);// 构造请求对象Request request = new Request.Builder()        .url("http://www.example.com/login") // 请求URL        .addHeader("Content-Type", "application/json") // 设置请求头        .post(requestBody) // 设置请求体        .build();// 创建Call对象并异步发起请求Call call = client.newCall(request);call.enqueue(new Callback() {    @Override    public void onFailure(Call call, IOException e) {        // 处理请求失败的情况    }    @Override    public void onResponse(Call call, Response response) throws IOException {        // 处理响应结果        String result = response.body().string();    }});

AsyncHttpClient

AsyncHttpClient 是一个轻量级的异步 HTTP 客户端,支持 HTTP、HTTPS、websocket 和 HTTP2.0 协议,可以实现全局的请求头和请求参数的设置。

GET请求

AsyncHttpClient client = new AsyncHttpClient();String url = "https://www.example.com/api/data";RequestParams params = new RequestParams();params.put("param1", "value1");params.put("param2", "value2");client.get(url, params, new AsyncHttpResponseHandler() {    @Override    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {        // 请求成功        String response = new String(responseBody);        Log.d("AsyncHttpClient", "Response: " + response);    }    @Override    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {        // 请求失败        Log.e("AsyncHttpClient", "Error: " + error.getMessage());    }});

POST请求

String url = "http://example.com/api/post";client.post(url, params, new AsyncHttpResponseHandler() {    @Override    public void onStart() {        // 发送请求前调用    }    @Override    public void onSuccess(int statusCode, Header[] headers, byte[] response) {        // 请求成功调用, statusCode为HTTP状态码        String result = new String(response);        Log.i(TAG, "onSuccess: " + result);    }    @Override    public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {        // 请求失败调用,statusCode为HTTP状态码        Log.e(TAG, "onFailure: statusCode=" + statusCode, e);    }    @Override    public void onRetry(int retryNo) {        // 请求重试调用    }});

来源地址:https://blog.csdn.net/Ai1114/article/details/132829990

--结束END--

本文标题: Android 网络请求方式

本文链接: https://www.lsjlt.com/news/414279.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android 网络请求方式
    前言 最近需要将Android 项目接入物联网公司提供的接口,所以顺便给大家分享一下Android中我们常用的网络请求吧!提醒大家一下,我们遇到接口需求,一定要先在Postman上测试接口是否正确,然后再去项目上写程序来请求接口;否则,请求...
    99+
    2023-09-21
    android
  • Android实现网络请求方法
    Android网络请求(1) ​ 安卓开发网络请求可谓是安卓开发的灵魂,如果你不会网络请求,那么你开发的应用软件就是一具没有灵魂的枯骨。 ​ 在安卓开发中进行网络请求和java中的网络请求有异曲同工之妙,但是安卓软件毕竟的安装在我们手机上的...
    99+
    2023-08-19
    android java jvm
  • vue网络请求方案原生网络请求和js网络请求库
    一、 原生网络请求 1. XMLHttpRequest(w3c标准)    // 没有promise时的产物 当时的万物皆回调,太麻烦 2. Fetch    // html5提供的...
    99+
    2024-04-02
  • vue网络请求方案原生网络请求和js网络请求库的示例分析
    这篇文章主要介绍vue网络请求方案原生网络请求和js网络请求库的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、 原生网络请求1. XMLHttpRequest(w3c标准)  &nbs...
    99+
    2023-06-21
  • Android网络请求框架Retrofit详解
    介绍:Retrofit 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求。本文使用Retrof...
    99+
    2023-05-30
    android 网络请求框架 retrofit
  • 分析web前端的网络请求方式
    本篇内容介绍了“分析web前端的网络请求方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、...
    99+
    2024-04-02
  • JS实现网络请求的方式有哪些
    这篇文章将为大家详细讲解有关JS实现网络请求的方式有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。背景为了应对越来越多的测试需求,减少重复性的工作,有道智能硬件测试组基于 electron 开发了一系...
    99+
    2023-06-29
  • 前端进行网络请求的方式有哪些
    这篇文章主要为大家展示了“前端进行网络请求的方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“前端进行网络请求的方式有哪些”这篇文章吧。一、前端进行网络请...
    99+
    2024-04-02
  • Android中OkHttp是如何做网络请求的
    小编给大家分享一下Android中OkHttp是如何做网络请求的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!什么是OKhttp简单来说 OkHttp 就是一个客户端用来发送 HTTP 消息并对服务器的响应做出处理的应用层...
    99+
    2023-06-14
  • JS实现网络请求的三种方式梳理
    目录背景前言XMLHttpRequestPromiseasync/await结语背景 为了应对越来越多的测试需求,减少重复性的工作,有道智能硬件测试组基于 electron 开发了一...
    99+
    2024-04-02
  • Vue网络请求的三种实现方式介绍
    目录1.XMLHttpRequest发送请求2.fetch发送请求3.axios请求库(Vue中推荐写法)模拟发送get和post请求网络请求时发送用户认证信息请求拦截器响应拦截器用...
    99+
    2024-04-02
  • Android 网络请求框架解析之okhttp与okio
    安卓网络请求 先看一下今天的大纲 导入okhttp和okio依赖 禁用掉明文流量请求的检查 添加访问权限 布局及代码实现 运行结果 下面...
    99+
    2024-04-02
  • 【小程序】网络请求API介绍及网络请求的封装
    文章目录 网络请求基本演练和封装网络请求基本演练网络请求配置域名网络请求的封装 网络请求基本演练和封装 网络请求基本演练 微信提供了专属的API接口,用于网络请求: wx.req...
    99+
    2023-09-04
    小程序 网络 微信小程序
  • 【iOS_Swift_Alamofire实现网络请求】
    文章目录 前言导入库原生网络请求单例封装一个原生网络请求Alamofire用法Alamofire的返回响应将返回的data转为字典/字符串 总结 前言 学习swift继续延续之前...
    99+
    2023-09-16
    swift ios 开发语言 objective-c c++
  • nodejs 异步网络请求
    Node.js是一个基于Chrome V8引擎构建的JavaScript运行时环境,可以在服务器端使用JavaScript编写程序,支持异步I/O操作,适合于构建高并发、低延迟的网络应用程序。在使用Node.js开发网络应用程序时,使用异步...
    99+
    2023-05-18
  • Android中网络请求加密的原理是什么
    这篇文章主要介绍了Android中网络请求加密的原理是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android中网络请求加密的原理是什么文章都会有所收获,下面我们一起来看看吧。非对称加密加密我了解的不多...
    99+
    2023-06-04
  • 实现Android中的网络请求和数据解析
    在Android中,可以使用以下方法进行网络请求和数据解析: 网络请求 使用Android框架提供的HttpURLConnection或HttpClient进行网络请求。 1 HttpUrlConnection HttpURLConnect...
    99+
    2023-09-07
    android java 开发语言
  • 网络异步请求之gevent
    我们知道对于网络请求这种IO bound的场景来说,最怕的就是某个请求阻塞了其余的操作,让并发性大大降低。今天就来介绍一款python下的并发库-gevent。 首先看一下他自己的介绍: gevent是一个基于libev的并发库。它为各种...
    99+
    2023-01-31
    求之 网络 gevent
  • python爬虫#网络请求request
    中文文档 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html requests库 虽然Python的标准库中 urllib模块已经包含了平常我们使用的大多数功...
    99+
    2023-01-30
    爬虫 网络 python
  • vue网络请求写在哪
    Vue 是一款前端框架,它为我们提供了很多开发时需要的支持,其中之一就是网络请求的支持。Vue 的网络请求可以使用第三方库 Axios 或者 Vue 自带的 Ajax 库进行实现。在选择使用哪一种方式时,我们需要考虑项目的实际情况。本篇文章...
    99+
    2023-05-24
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作