当前位置: 首页 > 知识库问答 >
问题:

如何在utils/helper类中使用AsyncTasks

池宸
2023-03-14

嗨,我最近才开始使用room数据库,我正在看的课程建议使用一个utils/helper类来完成所有的数据库操作,但我从来没有被教过如何将所有的utils静态方法转换为异步任务,以便在room数据库中正确使用,所以我想知道是否有人对如何实现这一点有建议。干杯

(下面是我正在使用的实用程序和mainFragment

Utils类

}

null

package maddo.com.aquariumfish.MainFragment;

import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.material.bottomnavigation.BottomNavigationView;

import java.util.ArrayList;

import maddo.com.aquariumfish.Adaptors.FishAdaptor;
import maddo.com.aquariumfish.Daos.FishDao;
import maddo.com.aquariumfish.DataBases.FishDataBase;
import maddo.com.aquariumfish.FavouriteFishActivity;
import maddo.com.aquariumfish.Models.Fish;
import maddo.com.aquariumfish.R;
import maddo.com.aquariumfish.SearchActivity;
import maddo.com.aquariumfish.Utils;

public class MainFragment extends Fragment {

    private RecyclerView MainRecView;

    private FishAdaptor fishAdaptor;




    private BottomNavigationView bottomNavigationView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frangment_main,container,false);

        initView(view);
        initBottomNavView();
        initRecView();

        return view;
    }



    @Override
    public void onResume() {
        super.onResume();
        initRecView();
    }

    private void initRecView(){
        fishAdaptor = new FishAdaptor(getActivity());
        MainRecView.setAdapter(fishAdaptor);
        MainRecView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
        ArrayList<Fish> fish = Utils.getAllFish(getActivity());
        if(null!= fish){
            fishAdaptor.setFish(fish);
        }



    }

    private void initBottomNavView() {

        bottomNavigationView.setSelectedItemId(R.id.bottomHome);

        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()){
                    case R.id.bottomHome:
                        break;
                    case R.id.bottomFavFish:
                        Intent FavIntent = new Intent(getActivity(), FavouriteFishActivity.class);
                        FavIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(FavIntent);
                        break;
                    case R.id.search:
                        Intent SearchIntent = new Intent(getActivity(), SearchActivity.class);
                        SearchIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(SearchIntent);
                        break;
                    default:
                        break;
                }
                return false;
            }
        });


    }
    private void initView(View view) {
        MainRecView = view.findViewById(R.id.mainRecView);
         bottomNavigationView =view.findViewById(R.id.MainbottomNavView);

    }

null

共有2个答案

那存
2023-03-14

不使用AsyncTask,我将建议使用coroutines。它非常简单,而且比AsyncTask效率最高。

晏富
2023-03-14

也许您不想将每个方法转换为AsyncTask,如果这是您要说的。AsyncTask是一个并发框架,它允许您在Utils类自己的专用线程上调用它。

如果我们想让事情变得尽可能简单,只需创建一个AsyncTask类并调用您的Utils方法。您的Utils方法将使用AsyncTask提供的上下文。

 类似资料:
  • 我想问一下你的知识。一个Spring启动应用程序包含各种映射器。这些应该进行测试。要测试映射器,应该读取一个JSON文件。这个JSON文件加载在每个测试文件中。到目前为止,该功能已在每个测试类中实现,我想将功能外包给一个助手类。我尝试如下: 在测试类中,我调用助手如下: 很遗憾,我收到以下错误消息: 组织。springframework。豆。工厂UnsatifiedDependencyExcept

  • 我想创建一个助手(函数)来避免在Laravel 5中的所有视图之间重复代码。该函数应该使用数据库中的数据(雄辩),所以它不能只是一个简单的函数或通用视图编辑器。 理想情况下,它应该是这样的: 其中Helper类使用Eloquent来验证值。我希望避免更改所有控制器。这方面的最佳做法是什么? 更新;我有以下工作原型。该函数搜索文本并将从字典中找到的单词替换为超链接: 我想在视图中的几个文本块和段落中

  • 问题内容: 我已经用C ++实现了一个类。我想将其与Python一起使用。 请提出逐步方法,并详细说明每个步骤。 这样的东西 现在,在Python中 请提出建议。我该怎么办?注意:我想知道手动的方法。我不希望任何第三方库依赖。 问题答案: 查看Boost.Python。这是一个用C ++编写python模块的库。 还要研究SWIG,它也可以处理其他脚本语言的模块。我过去曾使用它来为我的课程编写模块

  • 我有以下三个类:我尝试制作1和2的例程,并使用tjava调用主类和来自1和2的方法,但我无法获取这些方法。 1) 我在Talend中为上面的代码(1)和2)做了例程,然后用tjava调用方法,但是不能这样做。我还尝试对所有的tjava都使用,并且在每个tjava上都做了onSubjob ok。我如何在Talend中调用这些类并调用方法呢?

  • 对于vue-axios auth by api_token,我使用助手文件api.js。

  • 我有一个很大的问题,我不知道我是否错过了一些明显的东西或什么,但我不能发现我的错误。我有类SPN、A和B。我重载了2次operator=。我想将A类型或B类型作为参数传递。 它不会抛出任何错误。但是如果我在类B或A中尝试make operator(),则使用参数SPN,如下所示: 它会抛出SPN未命名类型的错误。我甚至不能在A类或B类中创建类SPN对象。也许它不是如何客观编程工作,所以我想得到它,