无法获取onResponse Retrofit之外的数据

时间:2017-01-17 17:46:18

标签: android variables asynchronous retrofit

我无法在Restrofit

中获取onResponse以外的数据

这是我的代码

List<Categorie> categorylist=new ArrayList<>();


    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(baseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    final CategoryApi api = retrofit.create(CategoryApi.class);



    Call<List<Categorie>> categoryCall = api.categories();


        categoryCall.enqueue(new Callback<List<Categorie>>() {
            @Override
            public void onResponse(Call<List<Categorie>> call, Response<List<Categorie>> response) {
                categorylist = (List<Categorie>)response.body();
                Log.i("success","Inside "+categorylist.toString());

                // here i get the data

            }

            @Override
            public void onFailure(Call<List<Categorie>> call, Throwable t) {
                System.out.println("Erreur");
            }
        });

        Log.i("success","Outside "+categorylist.toString());

        // here i get null

我已经尝试将类别列表设置为volatile和static而且它不起作用

2 个答案:

答案 0 :(得分:0)

您似乎在致电categorylist后立即尝试访问categoryCall.enqueueenqueue是一个异步操作,在执行下一行(包含categorylist.toString())之前无法完成。

尝试调用另一种方法,在此处您已离开评论&#34;此处我获取数据&#34;

public void onResponse(/*...*/ response) { categorylist = (List<Categorie>)response.body(); Log.i("success","Inside "+categorylist.toString()); // here i get the data businessLogic(categorieslist); } private void businessLogc(List<Categorie> categories) { myView.showCategories(categories); // or whatever you're doing with data }

答案 1 :(得分:0)

你知道,http请求是一个需要时间的进程,所以它应该是异步完成的。幸运的是,改造为我们处理了一切。

您需要做的是,当我们从OnResponse获得响应时,您需要更新当前视图,例如,如果您使用的是recyclerview,则有recyclerview.notifyDataSetChanged()方法。

如果你想从头开始得到结果。我建议你在其他活动或其他地方调用enqueue方法,然后当你得到结果时,将它保存到sqlite数据库中。

然后当你打开CategoryActivity从数据库加载它。

您可以添加刷新按钮以再次调用enqueue来更新数据库。