Android中对服务器发送http请求
16lz
2021-01-26
当我们需要和服务器进行交互的时候,需要对远程服务器发送请求,接下来我会概述一下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打印出来,或者通过异步处理。
更多相关文章
- tcping测试服务器TCP端口
- android中Http类的封装
- Android用StaticLayout实现文字转化为图片效果(类似长微博发送)
- Handler发送消息后消息队列的处理
- android之socket编程实例一
- android JavaMail发送邮件(可发送附件)
- 自己总结的目前Android通用的流行框架大全
- Rxjava+retrofit 添加公共请求参数及请求结果封装
- android Unterminated string at character 44 of