Retrofit2的get请求和post请求
2016-05-23 11:35
204 查看
准备工作
<uses-permission android:name="android.permission.INTERNET"/>
compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2'
定义
package com.github.c.retrofit2demo; import retrofit2.Call; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.http.Field; import retrofit2.http.FormUrlEncoded; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Query; /** * Created by a on 2016/5/19. */ public class AppStores { // 请求地址 : http://ip.taobao.com/service/getIpInfo.php?ip=202.202.32.202 // 1.定义一个接口 public interface TaobaoIPService { // 1.1.get请求:通过@GET注解,指明访问的地址 @GET("getIpInfo.php")//★这里最前面不能带“/” // 1.2.定义一个请求网络,并且返回结果的方法(方法返回Call<IP> ), // 通过@Query指定key,后面跟上value Call<IP> getIP(@Query("ip") String ip); /*********************************************************************************/ // 1.3.post请求:通过@FormUrlEncoded、和@POST注解,指明访问的地址 // (★注意:千万别忘了@FormUrlEncoded) @FormUrlEncoded @POST("getIpInfo.php") // 1.4.通过@Field来指定key,后面跟上value Call<IP> postIP(@Field("ip") String ip); } // 2.实例化retrofit,配置好请求地址和解析方式 static Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://ip.taobao.com/service/")//★这里最后面必须能带“/” .addConverterFactory(GsonConverterFactory.create())//设置将json解析为javabean所用的方式 .build(); // 3.通过retrofit创建第一步定义的接口的实例, // 供在外部直接通过该实例调用该接口的getIPad方法,完成网络请求 static AppStores.TaobaoIPService taobaoIPService = retrofit.create(AppStores.TaobaoIPService.class); }
使用
package com.github.c.retrofit2demo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; import android.widget.Toast; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class MainActivity extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); // 1.调用getIP(或者postIP)方法得到Call // Call<IP> call = AppStores.taobaoIPService.getIP("202.202.32.202"); Call<IP> call = AppStores.taobaoIPService.postIP("202.202.32.202"); // 2.call.enqueue开启异步网络请求 call.enqueue(new Callback<IP>() { @Override public void onResponse(Call<IP> call, Response<IP> response) { IP body = response.body(); String result = body.getData().toString(); // 3.可以直接更改UI,因为onResponse方法已经在UI线程中 tv.setText(result); // 4.取消请求 call.cancel(); Toast.makeText(MainActivity.this,call.isCanceled()+"",Toast.LENGTH_SHORT).show(); } @Override public void onFailure(Call<IP> call, Throwable t) { tv.setText(t.toString()); t.printStackTrace(); } }); } }