首页 > 解决方案 > 获取 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();

标签: javaandroidandroid-studio

解决方案


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

推荐阅读