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

随机推荐

  1. 活用Android的Message Queue(2)
  2. Android实现左右滑动效果
  3. Android实现动态改变app图标的示例代码
  4. Activity 的四种加载模式
  5. 在Android(安卓)Studio中使用Android-Pul
  6. [Android]实现静默安装APK的两种方法
  7. Camera服务之--架构浅析
  8. Android内核的简单分析
  9. 建立android新工程
  10. Android应用实例之----基于Service与Cont