Retrofit(一)、Retrofit+OkHttp实现简单的Get与Post请求

仰望天空,脚踏实地!

在上面两讲中学习了OkHttp的使用,OkHttp还是很强大的。

OkHttp下载文件并带进度条

OkHttp上传文件到服务器并带进度

而本人更喜欢Retrofit+OkHttp结合来实现网络请求,Retrofit使用注解,更加清晰与明了。下面用Retrofit实现简单的Get与Post请求。

一、服务器端

新建OkHttpServer服务器项目,Tomcat服务器具体配置可以参考搭建本地Tomcat服务器及相关配置 。在项目下新建PostAndGetServlet:最后启动服务器。
@WebServlet("/PostAndGetServlet")
public class PostAndGetServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public PostAndGetServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doGet");
        String userName = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("userName=="+userName+"==password=="+password);
        response.setCharacterEncoding("UTF-8");
        PrintWriter writer = response.getWriter();
        writer.print("Get收到信息");
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doPost");
        String userName = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("userName=="+userName+"==password=="+password);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        response.setCharacterEncoding("UTF-8");
        PrintWriter writer = response.getWriter();
        writer.print("Post收到信息");
    }

}

二、Android端

1.build.gradle引入相应的jar包

  compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:24.1.1'
    testCompile 'junit:junit:4.12'
    compile files('libs/gson-2.4.jar')
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-scalars:2.0.0'
    compile 'io.reactivex:rxjava:1.1.0'
    compile 'io.reactivex:rxandroid:1.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'

2.在layout文件中增加两个按钮:

   <Button
        android:id="@+id/refrofit_get"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="GET_TEST" />


    <Button
        android:id="@+id/refrofit_post"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="POST_TEST" />

在Activity中实例化两个按钮,并设置点击事件。代码就不贴了。

3.新建RetrofitUtil类,编写以下两个方法:

public class RetrofitUtil {

//电脑端cmd输入ipconfig获取ip
   public static String baseUrl = "http://192.168.0.100:8080/OkHttpServer/";

   public static  Retrofit.Builder retrofitBuilder = new Retrofit.Builder()
           .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    //返回string类型,如果返回的是json类型:addConverterFactory(GsonConverterFactory.create())    
        .addConverterFactory(ScalarsConverterFactory.create())
           .baseUrl(baseUrl);


    private static OkHttpClient okHttpClient = new OkHttpClient.Builder().connectTimeout(10000, TimeUnit.MILLISECONDS)
            .readTimeout(10000,TimeUnit.MILLISECONDS)
            .writeTimeout(10000,TimeUnit.MILLISECONDS).build();

//get请求
    public static void testGet(){
        InterfaceRetrofit.GetPetrofit getPetrofit = retrofitBuilder.build().create(InterfaceRetrofit.GetPetrofit.class);
        getPetrofit.getTest("xiaohong","123").enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {

                Log.i("test",response.body().toString());
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {

            }
        });
    }

//post请求
    public static void testPost(){
        InterfaceRetrofit.PostRetrofit postRetrofit = retrofitBuilder.build().create(InterfaceRetrofit.PostRetrofit.class);
        postRetrofit.postTest("xiaoqing","456").enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                Log.i("test",response.body().toString());
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {

            }
        });
    }
}

4.Retrofit的调用是通过接口实现的,上面的get与post请求也是,相应接口如下:

public interface InterfaceRetrofit {

    public interface GetPetrofit {
        @GET("PostAndGetServlet")
        Call<String> getTest(@Query("username") String username, @Query("password") String password);
    }


    public interface PostRetrofit{
        @FormUrlEncoded
        @POST("PostAndGetServlet")
        Call<String> postTest(@Field("username") String username, @Field("password")String password);
    }
}

5.为两个按钮添加点击事件,分别添加以上两个方法。最后别忘了相应的权限:

    <uses-permission android:name="android.permission.INTERNET"/>

6.Android 端相关log:

07-03 20:41:07.772 25048-25048/com.huang.retrofit I/test: Get收到信息
07-03 20:41:16.952 25048-25048/com.huang.retrofit I/test: Post收到信息

服务器端log:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用RxJava2 + Retrofit2 + OKHttp进行POST请求,可以按照以下步骤进行: 1. 添加依赖 在项目的build.gradle文件中添加以下依赖: ``` dependencies { implementation 'io.reactivex.rxjava2:rxjava:2.2.19' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.okhttp3:okhttp:4.9.1' } ``` 2. 创建Service接口 创建一个接口,用于定义POST请求的方法。例如: ``` public interface ApiService { @POST("login") Observable<LoginResponse> login(@Body LoginRequest request); } ``` 3. 创建Retrofit对象 在Application类或其他初始化类中,创建Retrofit对象: ``` public class MyApp extends Application { private static ApiService apiService; @Override public void onCreate() { super.onCreate(); // 创建OkHttpClient对象 OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) .build(); // 创建Retrofit对象 Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://example.com/api/") .client(client) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); apiService = retrofit.create(ApiService.class); } public static ApiService getApiService() { return apiService; } } ``` 4. 发起POST请求 在需要发起POST请求的地方,可以使用以下代码: ``` LoginRequest request = new LoginRequest(); request.setUsername("admin"); request.setPassword("123456"); MyApp.getApiService().login(request) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<LoginResponse>() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(LoginResponse response) { // 处理响应数据 } @Override public void onError(Throwable e) { // 处理异常 } @Override public void onComplete() { } }); ``` 上述代码中,我们首先创建了一个LoginRequest对象,用于存储要发送的数据。然后调用MyApp.getApiService().login(request)方法,发起POST请求。在这里,我们使用了RxJava2的Observable对象,将请求结果封装为一个可观察对象。使用subscribeOn(Schedulers.io())指定在IO线程中进行网络请求,使用observeOn(AndroidSchedulers.mainThread())指定在主线程中处理响应。最后通过subscribe方法订阅请求结果,处理响应数据或异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值