没有这样的实例字段:RetrofitClient

时间:2018-01-30 16:12:07

标签: android retrofit2

我正在尝试使用改造2制作HTTP客户端,因为我习惯在Visual Studio中工作,所以在调试代码并使其工作时遇到很多麻烦。

地球上的“没有这样的实例字段”错误?

到目前为止,网上帮助很差,所以我必须写出这个问题。

public class ApiUtils {
    private ApiUtils() {}

    public static final String BASE_URL = "https://cloudlibraryapiserver.azurewebsites.net/";

    public static APIService getAPIService() {
        return RetrofitClient.getClient(BASE_URL).create(APIService.class);
    }
}

这是我的ApiUtils课......

public class RetrofitClient {
    private static Retrofit retrofit = null;

    public static Retrofit getClient(String baseUrl) {
        if (retrofit==null) {
            retrofit = new Retrofit.Builder()
                    .baseUrl(baseUrl)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

RetrofitClient类

public interface APIService {
    @GET("api/books")
    Call<List<Book>> getBooks();

    @POST("api/books")
    @FormUrlEncoded
    Call<Book> saveBook(@Field("title") String title,
                        @Field("authorID") int authorID);
}

这是我的APIService接口(为什么它没有类实现?我不知道因为我跟踪了Internet的例子。)

public class MainActivity extends AppCompatActivity {
    private APIService mAPIService;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Set View Controls:

        listView = (ListView) findViewById(R.id.listViewBook);

        // Now do this:
        mAPIService = ApiUtils.getAPIService();

        Call<List<Book>> getBooksCall = mAPIService.getBooks();

        getBooksCall.enqueue(new Callback<List<Book>>() {
            @Override
            public void onResponse(Call<List<Book>> call, Response<List<Book>> response) {
                List<Book> books = response.body();

                listView.setAdapter(new BookAdapter(MainActivity.this, books));
            }

            @Override
            public void onFailure(Call<List<Book>> call, Throwable t) {
                Toast.makeText(MainActivity.this, "something went wrong - check your internet connection",
                        Toast.LENGTH_SHORT).show();
            }
        });
    }
}

当我调用 getBooksCall.enqueue 行时,我收到以下错误:

  

没有这样的实例字段:'mAPIService'

其他帖子已经接受了答案,其中说“Android Studio需要重启”,我没有尝试重启Android工作室,但这绝对不是正确的解决方案。

我需要深入回答,有改进经验的人如果你回答如何做到这一点我将需要一步一步的解释,而不仅仅是像大多数Android问题那样的单词答案,

这是最令人沮丧的事情,试图让这项工作在网上找不到真正的答案......

1 个答案:

答案 0 :(得分:1)

摆脱那个apiUtil并在你的mainActivity中添加:

Retrofit retrofit= new Retrofit.Builder()
.baseUrl("https://cloudlibraryapiserver.azurewebsites.net")
.addConverterFactory(GsonConverterFactory.Create()).build();

然后你需要得到你的服务:

APIService service = retrofit.Create(APIService.class);

然后调用图书清单:

 Call<List<Book>> getBooksCall = service.getBooks();

///回调等..

它没有获得任何服务的原因是因为你错过了第一步。希望有所帮助。