您将如何在 Utils/Helper 类中使用 AsyncTasks

Posted

技术标签:

【中文标题】您将如何在 Utils/Helper 类中使用 AsyncTasks【英文标题】:How would you use AsyncTasks in a Utils/Helper class 【发布时间】:2021-06-20 05:33:33 【问题描述】:

您好,我最近才开始使用 Room DataBase,我正在观看的课程建议使用 Utils/helper 类进行所有数据库操作,但我从未被教导如何将所有 utils 静态方法正确转换为 Asynctasks在房间数据库中使用,所以我想知道是否有人对如何实现这一点有建议。干杯

(下面是我正在使用的 Utils 和 mainFragment

The Utils class

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);

    

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

我会建议使用协程,而不是使用 AsyncTask。它比 AsyncTask 非常简单高效。

【讨论】:

以上是关于您将如何在 Utils/Helper 类中使用 AsyncTasks的主要内容,如果未能解决你的问题,请参考以下文章

如何在 symfony2 的表单类中隐藏标签?

ES6 类中的受保护属性(使用符号?)

使用 jQuery,您将如何从此输入创建以下输出?

Hilt 实战 | 创建应用级别 CoroutineScope

MFC 如何在一个类中使用另一个类中定义的变量

泛型类中的数组