获取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();

PlaceHolderAPI.getPosts()不是一个静态方法。对类调用方法要求该方法是静态的。

你需要做两件事中的一件:

修改接口的方法:

static Call<List> getPosts

访问实现PlaceHolderAPI接口的对象—让我们调用对象placeHolderObj并调用该对象的方法:

placeHolderObj.getPosts()

For 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!");
}