Android中对服务器发送http请求

本文介绍了在Android应用中如何使用OkHttp库向服务器发送HTTP请求,包括无参数请求和带参数请求的实现方式。重点是封装OkHttpClient对象,创建Request并设置URL和参数,以及如何处理服务器响应。同时提醒注意服务器80端口必须开放,Callback接口方法不能直接更新UI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们需要和服务器进行交互的时候,需要对远程服务器发送请求,接下来我会概述一下android中okhttp的用法

public class HttpUtil {//发送Http请求类,每次发送Http请求调用该方法
    /*
    * 通过okhttp3发送请求(用来请求纯文本比较方便)
    * */
    /*
    * 不发送数据
    * */
    public static void sendHttpRequest(String address, Callback callback){
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(address)
                .build();
        client.newCall(request).enqueue(callback);
        //请求封装成任务,通过newCall()发出请求,构造函数中参数为你发送的请求
        //然后执行enqueue()方法,讲服务器处理后的结果返回
    }
    /*
    * 发送数据
    * */
    public static void sendHttpRequest(String address, RequestBody requestBody, Callback callback){
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(address)
                .post(requestBody)
                .build();
        //将要发送的数据用RequestBody对象保存,然后传入到该参数即可
        client.newCall(request).enqueue(callback);
    }

}

我们在一个类中封装了两种请求方法,第一方法是不向服务器传输数据的,第二种方法是向服务器中传递一些数据的。首先OkHttpClient对象,我们通过该对象发送请求。然后创建Request对象,我们通过该该对象发送我们需要传递的参数,.url()方法中放的是服务器的地址,.post()方法中放的是向服务器传递的数据,最后通过build创建该任务。最后通过enqueue()方法得到服务器返回给我们的结果。

接下来给大家看一下具体的一个实例

RequestBody requestBody = new FormBody.Builder()
                        .add("user_id", uid)
                        .add("user_password",upassword)
                        .build();

 HttpUtil.sendHttpRequest(ConstantUtil.SERVICE_PATH + "insert_user.php", requestBody, new okhttp3.Callback() {
                    public void onFailure(Call call, IOException e) {
                        Log.d("onFailure: ",e+"");
                    }

                    public void onResponse(Call call, Response response) throws IOException {
                        String res = response.body().string();
                        String result = res;
                        Log.d("RegisterActivity:", result);
                        //将返回的值log出来
                        Message msg = new Message();
                        msg.obj = result;
                        handler.sendMessage(msg);
                        //通过异步处理,把服务器返回的数据丢到handler中,交给主线程更新UI或者处理逻辑
                    }
                });

private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            String result=(String)msg.obj;
            if(String.valueOf(1).equals(result)){
                Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
                new AlertDialog.Builder(RegisterActivity.this).setTitle("注册结果").setMessage("注册成功~~~")
                        .setPositiveButton("好的",null).show();

            }else if(String.valueOf(0).equals(result)){
                new AlertDialog.Builder(RegisterActivity.this).setTitle("").setMessage("注册失败了")
                        .setPositiveButton("重新注册",null).show();
            }
        }
    };

其中ConstantUtil.SERVICE_PATH 为我封装后的服务器IP, “insert_user.php”为处理该请求的php文件名。

需要注意的事项

  • 首先需要打开服务器的80端口,否则请求是不会发送成功的。
  • CallBack接口中实现的两种方法是不可以更新UI,因为是子线程,如果想得知处理结果,可以用logd打印出来,或者通过异步处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值