湛江阿里云代理商:android网络请求工具类

以下是一个简单的Android网络请求工具类,可以方便地进行网络请求。

import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;

import com.alibaba.fastjson.JSON;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class HttpUtils {
    
    private static Handler mHandler = new Handler(Looper.getMainLooper());
    
    /**
     * 发送GET请求
     *
     * @param url 请求URL
     * @param params 请求参数
     * @param callback 回调函数
     */
    public static void sendGet(String url, HashMap<String, String> params, final HttpCallback callback) {
        if (TextUtils.isEmpty(url)) {
            return;
        }
        if (params != null && !params.isEmpty()) {
            url += "?" + getParams(params);
        }
        final HttpURLConnection connection = getConnection(url, "GET");
        final String response = getResponse(connection);
        if (callback != null) {
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    callback.onResponse(response);
                }
            });
        }
    }
    
    /**
     * 发送POST请求
     *
     * @param url 请求URL
     * @param params 请求参数
     * @param callback 回调函数
     */
    public static void sendPost(String url, HashMap<String, String> params, final HttpCallback callback) {
        final HttpURLConnection connection = getConnection(url, "POST");
        if (params != null && !params.isEmpty()) {
            String json = JSON.toJSONString(params);
            byte[] bytes = json.getBytes();
            connection.getOutputStream().write(bytes);
        }
        final String response = getResponse(connection);
        if (callback != null) {
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    callback.onResponse(response);
                }
            });
        }
    }
    
    /**
     * 获取请求参数
     *
     * @param params 请求参数
     * @return
     */
    private static String getParams(HashMap<String, String> params) {
        if (params == null || params.isEmpty()) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String> entry = iterator.next();
            sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
        }
        String result = sb.toString();
        if (result.endsWith("&")) {
            result = result.substring(0, result.length() - 1);
        }
        return result;
    }
    
    /**
     * 获取HttpURLConnection对象
     *
     * @param url 请求URL
     * @param method 请求方法,GET或POST
     * @return
     */
    private static HttpURLConnection getConnection(String url, String method) {
        HttpURLConnection connection = null;
        try {
            URL mURL = new URL(url);
            connection = (HttpURLConnection) mURL.openConnection();
            connection.setRequestMethod(method);
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);
            connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
            connection.setRequestProperty("Accept", "application/json");
            connection.setRequestProperty("Connection", "Keep-Alive");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return connection;
    }
    
    /**
     * 获取响应结果
     *
     * @param connection HttpURLConnection对象
     * @return
     */
    private static String getResponse(HttpURLConnection connection) {
        StringBuilder sb = new StringBuilder();
        try {
            InputStream is = connection.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            br.close();
            isr.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }
    
    /**
     * Http请求回调函数
     */
    public interface HttpCallback {
        void onResponse(String response);
    }
}

使用方法:

// 发送GET请求
HttpUtils.sendGet("http://example.com/path", null, new HttpUtils.HttpCallback() {
    @Override
    public void onResponse(String response) {
        // 处理响应结果
    }
});

// 发送POST请求
HashMap<String, String> params = new HashMap<>();
params.put("key1", "value1");
params.put("key2", "value2");
HttpUtils.sendPost("http://example.com/path", params, new HttpUtils.HttpCallback() {
    @Override
    public void onResponse(String response) {
        // 处理响应结果
    }
});

注意:在Android中不能在主线程中执行网络请求,需要在子线程或异步任务中执行。本文示例代码中的HttpUtils工具类只提供网络请求相关的代码逻辑,因此没有涉及到线程相关的代码。在实际使用时,建议在异步任务中调用HttpUtils工具类的相关方法。

在 Android 开发中,经常需要跟网络打交道,请求数据、上传图片、下载文件等操作都要用到网络请求工具类。以下是一个简单的封装了 OkHttp 的网络请求工具类,可以供参考:

public class HttpUtil {
    private static final String TAG = "HttpUtil";

    public static void get(String url, Callback callback) {
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .build();
        Request request = new Request.Builder()
                .url(url)
                .build();

        client.newCall(request).enqueue(callback);
    }

    public static void post(String url, RequestBody body, Callback callback) {
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .build();
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();

        client.newCall(request).enqueue(callback);
    }

    public static void postJson(String url, String json, Callback callback) {
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .build();

        MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(mediaType, json);

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();

        client.newCall(request).enqueue(callback);
    }
}

其中,get() 方法用于发起 GET 请求,post() 方法用于发起 POST 请求,postJson() 方法则用于发起 POST 请求并传递 JSON 数据。

这是一个比较简单的网络请求工具类,大家可以根据自己的需求进行扩展和修改。在使用时,只需要调用对应的方法并提供相应的参数即可。如下面的示例代码:

湛江阿里云代理商:android网络请求工具类
HttpUtil.get("https://www.baidu.com", new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        Log.e(TAG, "request failed!" + e.getMessage());
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        Log.d(TAG, "response body:" + response.body().string());
    }
});

String json = "{"name":"zhangsan", "age":20}";
HttpUtil.postJson("https://httpbin.org/post", json, new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        Log.e(TAG, "request failed!" + e.getMessage());
    }

    @Override
    public void onResponse(Call call, Response response) throws IOException {
        Log.d(TAG, "response body:" + response.body().string());
    }
});

上面的代码分别使用了 get() 和 postJson() 方法发起了 GET 和 POST 请求,并在回调函数中处理了响应结果。需要注意的是,在回调中处理响应结果的时候,需要在子线程中执行,否则会抛出异常。

发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/157936.html

(0)
luotuoemo的头像luotuoemo
上一篇 2024年3月7日 16:35
下一篇 2024年3月7日 16:52

相关推荐

  • 宜昌阿里云代理商:安卓开发拦截短信代码

    由于涉及到隐私和安全问题,我们不会提供任何破解或拦截短信的代码。我们建议开发者遵守相关法律法规,并通过正规渠道获取用户授权和数据。同时,阿里云提供了多种安全服务和技术支持,可以帮助开发者保障应用程序和用户的安全。 对于安卓开发拦截短信的代码,最常见的实现方式是通过广播接收器。 首先,需要在 AndroidManifest.xml 中声明一个广播接收器,监听短…

    2024年3月6日
    19400
  • 绍兴阿里云代理商:ASP替换图片

    在绍兴,阿里云代理商可以帮助企业实现各种云服务的需求,包括 ASP(阿里云服务器平台)的替换图片功能。 ASP是阿里云提供的一种云服务器产品,通过ASP可以快速搭建和部署企业的应用程序和网站。ASP提供了丰富的功能和可扩展性,满足了很多企业的需求。 在ASP中,替换图片是一个常见的需求。企业可以通过阿里云代理商提供的服务,将原始图片文件替换为新的图片文件。代…

    2023年12月27日
    20200
  • 应聘阿里云客服难吗

    应聘阿里云客服可能会有一定的挑战,但是否难取决于个人的能力和适应能力。作为阿里云客服,你需要具备一定的技术知识,能够熟练操作阿里云服务,理解云计算相关概念,能够解答用户在使用阿里云产品过程中遇到的问题,并提供技术支持和解决方案。 此外,阿里云客服工作中还需要有良好的沟通能力和解决问题的能力,能够耐心倾听用户的需求并提供满意的解决方案。客服工作通常需要处理大量…

    2023年10月23日
    20100
  • 长沙阿里云代理商:阿里云计算面试

    阿里云计算的面试主要会关注应聘者的相关专业知识,包括云计算的基本知识、网络架构、安全防护等。同时,由于阿里云是一家以服务为导向的公司,因此面试官也会对应聘者的服务态度和沟通能力进行考察。具体的面试内容可能会包括以下几方面: 云计算基础:这部分会问到一些关于云计算的基本知识,如云计算的特点、优点、适用场景等。 技术能力:这部分主要考察应聘者的专业技术能力,如云…

    2024年3月13日
    19200
  • 腾讯云物联网平台开发流程图

    腾讯云的服务器怎么开发的 自己购置底层硬件(一般由服务器、存储、网络设备构成),然后通过虚拟化的方式共享所有资源,然后按需做成虚拟机分配给不同的用户使用即可。你可以去服务器厂商,国内的正睿、浪潮、曙光、联想、国外的惠普、戴尔等参考一下。 物联网工程师需要学习什么技术 物联网工程专业应当掌握的知识和技能:1、掌握和计算机科学与技术相关的基本理论知识;2、掌握物…

    2023年8月28日
    20000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

4000-747-360

在线咨询: QQ交谈

邮件:ixuntao@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
购买阿里云服务器请访问:https://www.4526.cn/