您的位置:首页 > 移动开发 > Android开发

[Android] Retrofit2.0 GET和POST方式请求

2016-10-04 16:36 375 查看
Retrofit 是什么?

根据官网的解释:Retrofit is a type-safe HTTP client for Android and java.我理解为是一种更好的与接口进行通信的机制。

Retrofit2.0的使用

添加依赖:在 build.gradle(app) 内

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'


不要忘了在 Manifest.xml文件中添加所需的网络权限

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


接下来将 API 接口转成一个 Java 接口

我自己测试的 API 接口为:

http://localhost:8080/data/myData


这里可以用别的接口。

转化写成 Java 接口为:

public interface MyInterface {
@GET("data/{input}")
Call<Data> getdata(@Path("input") String input);
}


定义 Data,获取 json 数据:

public class Data {
private int id;
private String name;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}


构造一个 Retrofit 对象:

Retrofit retrofit= new Retrofit.Builder()
.baseUrl("http://localhost:8080/")
.addConverterFactory(GsonConverterFactory.create())
.build();


注意这里在实际操作中,localhost要改成你的本地IP

进入命令提示符:输入 ipconfig,看到 IPv4地址,将localhost修改成对应地址。

接着,创建 API 接口对象,这里 APIInterface 是我们创建的接口:

MyInterface service = retrofit.create(MyInterface.class);


使用 MyInterface 创建一个『请求对象』:

Call<Data> data = service.getData("myData");


注意这里的 .getData(“myData”) 取代了前面的 {input}。到这里,我们要访问的地址就成了:

http://localhost:8080/data/myData


可以看出这样的方式有利于我们使用不同参数访问同一个 Web API 接口,比如你可以随便改成 .getData(“Data”)

最后,发送请求。

data.clone().enqueue(new Callback<Data>() {
@Override public void onResponse(Call<Data> call, Response<Data> response) {
Toast.makeText(MainActivity.this, "success", Toast.LENGTH_SHORT).show();
id.setText("Id is :" + response.body().getId());
name.setText("The name is :"+response.body().getName());

}

@Override public void onFailure(Call<Data> call, Throwable t) {
t.getMessage();
}
});


在这里,如果设置了点击事件触发

data.getData()


的话,第二次点击会造成程序崩溃,可以修改为

data.clone.getData()


关于 post 请求的方法:

转化接口时将 get 方法修改成以下:

public interface MyInterface {

@FormUrlEncoded
@POST("data/myData")
Call<Data> getData(@Field("id") int id,@Field("name") String name);
}

Call<Data> data = service.getData("2","张三");


大功告成,关于一些其他的内容还在摸索中!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐