返回顶部
首页 > 资讯 > 移动开发 >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://lsjlt.com/news/414279.html(转载时请注明来源链接)

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

猜你喜欢
  • 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
  • Android网络请求之OkHttp
    OkHttp是一个第三方类库,用于android中请求网络。这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary)。用于替代HttpUrlConnectio...
    99+
    2022-06-06
    okhttp android网络请求 Android
  • Android开发中的几种网络请求方式详解
    Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Androi...
    99+
    2022-06-06
    android开发 Android
  • android 网络请求库volley方法详解
    使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包   volley网络请...
    99+
    2022-06-06
    volley Android
  • vue网络请求方案原生网络请求和js网络请求库的示例分析
    这篇文章主要介绍vue网络请求方案原生网络请求和js网络请求库的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、 原生网络请求1. XMLHttpRequest(w3c标准)  &nbs...
    99+
    2023-06-21
  • Android Retrofit和Rxjava的网络请求
    Android  Retrofit和Rxjava的网络请求 去年的时候好多公司就已经使用Rxjava和Retrofit了,最近自自己学习了一下,感觉真的是很好用,让自...
    99+
    2022-06-06
    rxjava retrofit Android
  • Android网络请求库android-async-http介绍
    Android网络请求库:android-async-http开源框架 之前有一篇描述了客户端请求服务器端的方式—Post的请求方式。今天介绍一个请求服务器的一个开源库—an...
    99+
    2022-06-06
    HTTP android网络请求 async Android
  • 分析web前端的网络请求方式
    本篇内容介绍了“分析web前端的网络请求方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、...
    99+
    2024-04-02
  • Android Volley 异步网络请求分析
      Volley下载   Google I/O 2013 大会上发布的 Android 异步网络请求框架和图片加载框架。   试用场景:适合数据量小,通信频繁的网络操作...
    99+
    2022-06-06
    volley 异步 Android
  • Android网络请求框架Retrofit详解
    介绍:Retrofit 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求。本文使用Retrof...
    99+
    2023-05-30
    android 网络请求框架 retrofit
  • JS实现网络请求的方式有哪些
    这篇文章将为大家详细讲解有关JS实现网络请求的方式有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。背景为了应对越来越多的测试需求,减少重复性的工作,有道智能硬件测试组基于 electron 开发了一系...
    99+
    2023-06-29
  • Android HTTP网络请求的异步实现
    前言 大家都知道网络操作的响应时间是不定的,所有的网络操作都应该放在一个异步操作中处理,而且为了模块解耦,我们希望网络操作由专门的类来处理。所有网络数据发送,数据接收都有某几个...
    99+
    2022-06-06
    HTTP 异步 Android
  • JS实现网络请求的三种方式梳理
    目录背景前言XMLHttpRequestPromiseasync/await结语背景 为了应对越来越多的测试需求,减少重复性的工作,有道智能硬件测试组基于 electron 开发了一...
    99+
    2024-04-02
  • 前端进行网络请求的方式有哪些
    这篇文章主要为大家展示了“前端进行网络请求的方式有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“前端进行网络请求的方式有哪些”这篇文章吧。一、前端进行网络请...
    99+
    2024-04-02
  • Vue网络请求的三种实现方式介绍
    目录1.XMLHttpRequest发送请求2.fetch发送请求3.axios请求库(Vue中推荐写法)模拟发送get和post请求网络请求时发送用户认证信息请求拦截器响应拦截器用...
    99+
    2024-04-02
  • Android 网络请求框架Volley实例详解
    Android 网络请求框架Volley实例详解 首先上效果图 Logcat日志信息on Reponse Volley特别适合数据量不大但是通信频繁的场景,像文件上传下载不...
    99+
    2022-06-06
    volley Android
  • Android中OkHttp是如何做网络请求的
    小编给大家分享一下Android中OkHttp是如何做网络请求的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!什么是OKhttp简单来说 OkHttp 就是一个客户端用来发送 HTTP 消息并对服务器的响应做出处理的应用层...
    99+
    2023-06-14
  • 【小程序】网络请求API介绍及网络请求的封装
    文章目录 网络请求基本演练和封装网络请求基本演练网络请求配置域名网络请求的封装 网络请求基本演练和封装 网络请求基本演练 微信提供了专属的API接口,用于网络请求: wx.req...
    99+
    2023-09-04
    小程序 网络 微信小程序
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作