WooCommerce Rest Api Android 库问题(Woodroid)

Posted

技术标签:

【中文标题】WooCommerce Rest Api Android 库问题(Woodroid)【英文标题】:WooCommerce Rest Api Android Library Issue (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
            
        )
    

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

【问题讨论】:

【参考方案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;
                            );

                
            
            );



【讨论】:

以上是关于WooCommerce Rest Api Android 库问题(Woodroid)的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce REST API - 按修改日期过滤订单

woocommerce通过rest api验证用户名和密码

php facetwp woocommerce rest api check

登录时 WooCommerce REST API 身份验证失败

Woocommerce rest api为客户获取所有产品

Woocommerce Paypal REST api 与 React JS 的集成