日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了如何在Room的異步后臺任務中寫入和讀取數據?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我想在volley庫的幫助下將Web上的JSON內容保存到Room中。
allowMainThreadQueries()
我在Room builder部分添加了這個,但是當執行data insert和getall方法時,屏幕凍結。就不能手術了。我如何在后臺執行此操作?
關于LiveData,我找不到一個足夠簡單的解釋,除此之外,我對你們將要舉的例子很好奇。請展開此問題


   public void getFoodRequest() {
       Log.d("TAG_JSON_FOOD_DB", "--------------------------------");
       foodList.clear();
       @SuppressLint("SetJavaScriptEnabled") JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
               Constant.FOOD_LIST_JSON, null,
               response -> {
                   long start = System.currentTimeMillis();
                   try {
                       JSONArray jsonArray = response.getJSONArray("MyData");
                       for (int i = 0; i < jsonArray.length(); i++) {
                           JSONObject object = jsonArray.getJSONObject(i);
                           FoodArray foodArray = new FoodArray();

                           List<FoodUnitsData> foodUnitList = new ArrayList<>();
                           FoodsData foodsData = new FoodsData();

                           foodsData.setFoodId(object.getString("food_id"));
                           foodsData.setFoodName(object.getString("food_name"));
                           foodsData.setFoodImage(object.getString("food_image"));
                           foodsData.setFoodUrl(object.getString("food_url"));
                           foodsData.setFoodKcal(object.getString("food_kcal"));
                           foodsData.setFoodDescription(object.getString("food_description"));
                           foodsData.setCarbPercent(object.getString("carb_percent"));
                           foodsData.setProteinPercent(object.getString("protein_percent"));
                           foodsData.setFatPercent(object.getString("fat_percent"));


                           JSONArray jsonUnitsArray = object.getJSONArray("units");

                           for (int k = 0; k < jsonUnitsArray.length(); k++) {
                               JSONObject unitobject = jsonUnitsArray.getJSONObject(k);

                               FoodUnitsData foodUnitData = new FoodUnitsData();
                               foodUnitData.setUnit(unitobject.getString("unit"));
                               foodUnitData.setAmount(unitobject.getString("amount"));
                               foodUnitData.setCalory(unitobject.getString("calory"));
                               foodUnitData.setCalcium(unitobject.getString("calcium"));
                               foodUnitData.setCarbohydrt(unitobject.getString("carbohydrt"));
                               foodUnitData.setCholestrl(unitobject.getString("cholestrl"));
                               foodUnitData.setFiberTd(unitobject.getString("fiber_td"));
                               foodUnitData.setIron(unitobject.getString("iron"));
                               foodUnitData.setLipidTot(unitobject.getString("lipid_tot"));
                               foodUnitData.setPotassium(unitobject.getString("potassium"));
                               foodUnitData.setProtein(unitobject.getString("protein"));
                               foodUnitData.setVitAIu(unitobject.getString("vit_a_iu"));
                               foodUnitData.setVitC(unitobject.getString("vit_c"));
                               foodUnitList.add(foodUnitData);
                           }
                           foodArray.setFoods(foodsData);
                           foodArray.setFoodUnits(foodUnitList);
                           appDatabase.daoAccess().insertAll(foodArray); // insert
                       }
                       
                       foodsArray = appDatabase.daoAccess().getAll(); // get all data
                       for (int i = 0; i < foodsArray.size(); i++) {
                           Log.d("TAG_JSON_FOOD_DB", "---------: " + "" + foodsArray.get(i).getFoods().getFoodName());
                       }

                       long finish = System.currentTimeMillis();
                       Log.d("TAG_JSON_FOOD_DB", "   	" + (finish - start));
                       Log.d("TAG_JSON_FOOD_DB", "   	" + "******************
");
                   } catch (JSONException e) {
                       e.printStackTrace();
                       Log.d("TAG_JSON_FOOD", "e:" + e);
                   }
               }, error -> {
           Log.d("TAG_JSON_FOOD", error.toString());
       });
       jsonObjectRequest.setShouldCache(false);

       jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));


       RequestQueue request_queue = Volley.newRequestQueue(context);
       request_queue .add(jsonObjectRequest);
   }

推薦答案

需要更多信息才能回答您的問題。例如,&quot;daoAccess().getAll()&quot;的返回類型是什么?它是實時數據嗎?(我假設是這樣)。

此代碼來自片段/活動還是視圖模型?(我假定這是ViewModel)

不要將LiveData視為您需要的值,而應將其視為一個標志,該標志將告訴您該值已準備就緒,可以讀取。

daoAccess().getAll()將返回LiveData<SomeObjectProbablyAList>

由于&quot;getall&quot;方法在您的viewModel中,您將把返回值存儲在LiveData變量中,假設:

val returnValue: `LiveData<SomeObjectProbablyAList> = MutableLiveData<SomeObjectProbablyAList>

如何在后臺執行此操作?

您需要在viewModelScope內運行代碼
查看:https://developer.android.com/topic/libraries/architecture/coroutines

從您的片段/活動中,您將觀察到viewModel處的rereturn Value。

在您的ViewModel中完成請求之后,您將更新rereturn Value。由于您的frag/活動正在觀察rereturn Value,因此一旦它更新,您就可以運行您的片段/viewModel中的任何代碼。

您可以在此處找到有關liveData的更多信息:
https://developer.android.com/topic/libraries/architecture/livedata

這篇關于如何在Room的異步后臺任務中寫入和讀取數據?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:Room 寫入 后臺 如何在 數據 讀取
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定