java - 获取 API,Android Studio 静态
问题描述
我遇到了一个问题,PlaceholderAPI.getPosts();
表明
Non-static method 'getPosts()' cannot be referenced from a static context
我才刚刚开始,所以我正在学习一个教程(我有一些编程 android 应用程序的经验,但并不多)代码是:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.build();
Call<List> call = PlaceholderAPI.getPosts();
call.enqueue(new Callback<List>()
{
@Override
public void onResponse(Call<List> call, Response<List> response)
{
Log.d("Yo", "Success!");
}
@Override
public void onFailure(Call<List> call, Throwable t)
{
Log.d("Yo", "Error!");
}
});
Log.d("Yo","Hello World!");
}
PlaceholderAPI.java 的代码是一个带有代码的接口:
@GET("posts")
Call<List> getPosts();
解决方案
对于 Connection创建一个ApiClient
类。
public class ApiClient {
private static Retrofit retrofit = null;
public static final String base_URL ="https://jsonplaceholder.typicode.com/";
static final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(20, TimeUnit.SECONDS)
.writeTimeout(20, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
public static Retrofit getApiClient(){
if(retrofit==null){
Gson gson = new GsonBuilder()
.setLenient()
.create();
retrofit = new Retrofit.Builder()
.baseUrl(base_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build();
}
return retrofit;
}
}
您可以像这样创建与您的接口的连接,然后您可以通过接口函数将您的调用加入队列。
PlaceholderAPI placeholder= ApiClient.getApiClient().create(PlaceholderAPI.class);
Call<List> call = PlaceholderAPI.getPosts();
call.enqueue(new Callback<List>()
{
@Override
public void onResponse(Call<List> call, Response<List> response)
{
Log.d("Yo", "Success!");
}
@Override
public void onFailure(Call<List> call, Throwable t)
{
Log.d("Yo", "Error!");
}
});
Log.d("Yo","Hello World!");
}
推荐阅读
- algorithm - 将索引镜像到数组中
- node.js - 使用cheerio 选择嵌套节点
- arrays - 绘图的意外输出
- python - 在 urlpatterns 中为 MEDIA_URL 提供一个视图
- javascript - Bootstrap 4 工具提示/弹出框使用自动放置作为后备(两个放置值)
- reactjs - 如何删除附加到 React 中状态的加载更多按钮?
- db2 - 无法在 db2 中合并 clob
- tensorflow - 为什么要在深度学习中重新缩放图像?
- c# - 在 Plesk 服务器上创建 ODBC 连接后,如何在我的 asp.net 代码中使用它?
- css - Firefox 中的 CSS 动画不流畅