您的位置:首页 > 其它

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();
}
});

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: