【问题标题】:WooCommerce Rest Api Android Library Issue (Woodroid)WooCommerce Rest Api Android 库问题(Woodroid)
【发布时间】:2020-12-24 05:01:23
【问题描述】:

我正在使用woodroid library 将数据从我的wordpress woocommerce 网站获取到我的Android 应用程序中,遵循this。现在这个库只能一起检索所有数据,然后我可以显示它。但我不知道为什么我的应用程序以这种方式加载数据非常慢。所以我需要通过使用下面的代码一一获取值(作为示例产品)来加快流程,

  val allProducts : MutableLiveData<Product> by lazy {
        woocommerce = Woocommerce.Builder().setSiteUrl(baseURL)
            .setApiVersion(Woocommerce.API_V2)
            .setConsumerKey(consumerKey)
            .setConsumerSecret(consumerSecret)
            .build()
        preLoadProducts()
        MutableLiveData<Product>()
    }

    private fun preLoadProducts() {
        val productFilter = ProductFilter()
        productFilter.page = pageNum
        productFilter.per_page = 1
        loadProducts(productFilter)
    }

    private fun loadProducts(productFilter: ProductFilter){
        woocommerce.ProductRepository().products(productFilter).enqueue(object :
            Callback<List<Product>> {
            override fun onResponse(call: Call<List<Product>>, response: Response<List<Product>>) {
                try{
                    val productsResponse = response.body()
                    allProducts.value = productsResponse?.get(0)
                    pageNum ++
                    preLoadProducts()
                }catch (e : Exception){
                    e.printStackTrace()
                    allProducts.value = null
                }

            }
            override fun onFailure(call: Call<List<Product>>, t: Throwable) {
                t.printStackTrace()
                allProducts.value = null
            }
        })
    }

现在我明白这不是实现这一目标的最有效方法,但它对我有用(几乎)。 所以我需要一个更好、更有效的解决方案。如果有人有任何想法,请帮忙。 谢谢

【问题讨论】:

    标签: android android-studio woocommerce wordpress-rest-api woocommerce-rest-api


    【解决方案1】:

    这和我做的很接近

    我建议使用库paging

    这个库会做任何事情

    另外,为了节省内存,使用 rxjava 或 coroutines for kotlin 这也有帮助

    查看这段 Java 代码,它向您展示了如何以灵活的方式获取完整的数据,从而节省内存


    @GET("wp-json/wc/v3/coupons?")
    Observable<ArrayList<Coupons>> get_List_Codes(  @Query("page") int page, @Query("consumer_key") String consumer_key
            , @Query("consumer_secret") String consumer_secret);
    
    
    Observable<ArrayList<Coupons>> getPageAndNext(int c) {
    
        return ClientApi.getInstance().get_List_Codes(count)
              ) )
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.computation())
                .concatMap(obsOld-> {
    
                    if (obsOld.size() == 0) {
                       return Observable.just(obsOld);
                    }
                    else {
                        count ++;
                         return Observable.zip(Observable.just(obsOld)
                        ,getPageAndNext(count),(product11, product22) -> {
                                    product11.addAll(product22);
                                    return product11;
                                });
    
                    }
                }
                );
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2019-02-05
      • 2018-08-28
      相关资源
      最近更新 更多