Asynctask 崩溃 ViewPager RecyclerView (Android)

Posted

技术标签:

【中文标题】Asynctask 崩溃 ViewPager RecyclerView (Android)【英文标题】:Asynctask crash ViewPager RecyclerView (Android) 【发布时间】:2019-03-20 16:54:56 【问题描述】:

目前,我正在做一个 android 项目,我在其中实现了底部导航视图和滑动效果,我可以在其中左右交换片段。它们是同步的。

很遗憾,我有 2 个错误,我无法解决。

    当我滑动时,Asynctask 崩溃。我收到以下错误:

E/MessageQueue-JNI:java.lang.IllegalStateException:无法执行任务:任务已经在运行。

这是因为 Asynctask 已在运行时被调用?

我想我必须在运行 Asynctask 之前取消它,但我该怎么做呢?

    我有 5 个片段开始,您可以在我的底部导航视图中看到这些片段。它们还可以通过在屏幕上左右滑动来改变。在导航栏上的第二个项目上,我有一个 Cardview,它是用 recyclerViewAdapter 实现的。每当我单击其中一个卡片视图时,它都应该更改为新片段。导航视图中未显示的片段。在 recyclerViewAdapter Java 类中有一个 onClick,每当我点击其中一个卡片视图时,它都会更改片段,但由于某种原因,它不起作用。

图片在这里:

* 代码在这里 *

主活动:

@Override
public void onBackPressed() 
    if (mPager.getCurrentItem() == 0) 
        // If the user is currently looking at the first step, allow the system to handle the
        // Back button. This calls finish() on this activity and pops the back stack.
        super.onBackPressed();
     else 
        // Otherwise, select the previous step.
        mPager.setCurrentItem(mPager.getCurrentItem() - 1);
    


/**
 * view pager.
 */

public void setupViewPager(ViewPager viewPager)

    ViewPageAdapter adapter = new ViewPageAdapter(getSupportFragmentManager());
    adapter.addFragment(new StartsideFragment());
    adapter.addFragment(new CardViewTabelFragment());
    adapter.addFragment(new SensorOversigtFragment());
    adapter.addFragment(new KontaktFragment());
    viewPager.setAdapter(adapter);



public void setViewPager(int fragmentNumber)

    mPager.setCurrentItem(fragmentNumber);



public void enableViewPagerSwitch()

    mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() 
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 

        

        @Override
        public void onPageSelected(int position) 

            if (prevMenuItem != null) 
                prevMenuItem.setChecked(false);
            
            else
            
                mBottomNav.getMenu().getItem(0).setChecked(false);
            
            Log.d("page", "onPageSelected: "+position);
            mBottomNav.getMenu().getItem(position).setChecked(true);
            prevMenuItem = mBottomNav.getMenu().getItem(position);

        

        @Override
        public void onPageScrollStateChanged(int state) 

        
    );

    setupViewPager( mPager );





public void bot_Navigation() 

    mBottomNav = (BottomNavigationView) findViewById( R.id.nav_bot );

    botNavHelper.disableShiftMode( mBottomNav );

    mBottomNav.setOnNavigationItemSelectedListener( new BottomNavigationView.OnNavigationItemSelectedListener() 
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) 
            switch (item.getItemId()) 

                case R.id.bot_startside:
                    // overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_left );
                    //mPager.setCurrentItem( 0 );
                    setViewPager( 0 );
                    //fragment = new StartsideFragment();

                    break;

                case R.id.bot_datatabel:
                    //overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_left );
                    //mPager.setCurrentItem( 1 );
                    setViewPager( 1 );
                    //fragment = new CardViewTabelFragment();
                    //viewPager.setCurrentItem( 1 );
                    break;

                case R.id.bot_sensorOversigt:
                    //overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_left );
                    //mPager.setCurrentItem( 2 );
                    setViewPager( 2 );
                    //fragment = new KontaktFragment();
                    break;

                case R.id.bot_kontakt:
                    //overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_left );
                    //mPager.setCurrentItem( 3 );
                    setViewPager( 3 );
                    //fragment = new SensorOversigtFragment();
                    break;

                case R.id.bot_logUd:
                    //overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_left );
                    //mPager.setCurrentItem( 4 );
                    setViewPager( 4 );
                    alertDialog();
                    break;
            

            if (fragment != null) 
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace( R.id.flMain, fragment );
                ft.commit();
            

            return true;
        
     );



@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate( savedInstanceState );

    onCreate2();

    bot_Navigation();




protected void onCreate2() 
    //  protected void onCreate2(Bundle savedInstanceState) 
    //  super.onCreate(savedInstanceState);
    setContentView( R.layout.activity_main );
    Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar );
    setSupportActionBar( toolbar );
    //toolbar.setLogo( R.mipmap.ic_launcher_cxweb_black );

    TextView mTitle = (TextView) toolbar.findViewById( R.id.toolbartitle );

    mTitle.setText( toolbar.getTitle() );

    getSupportActionBar().setDisplayShowTitleEnabled( false );

    //toolbar.setTitle( "LeoSenses" );

    mPager = (ViewPager) findViewById( R.id.flMain );

    enableViewPagerSwitch();

    DrawerLayout drawer = (DrawerLayout) findViewById( R.id.drawer_layout );
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close );
    drawer.addDrawerListener( toggle );
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById( R.id.nav_view );
    navigationView.setNavigationItemSelectedListener( this );


    //Default fragment for startside

    android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace( R.id.flMain, new StartsideFragment() );
    ft.commit();

    navigationView.setCheckedItem( R.id.nav_startside );

    PreferenceManager.getDefaultSharedPreferences( this ).getBoolean( "brugPosVedStart", true );


ViewPageAdapter:

public class ViewPageAdapter extends FragmentStatePagerAdapter 

private final List<Fragment> mFragmentList = new ArrayList<>();

public ViewPageAdapter(FragmentManager fm) 
    super( fm );


public void addFragment(Fragment fragment) 
    mFragmentList.add( fragment );


@Override
public Fragment getItem(int position) 
    return mFragmentList.get( position );


@Override
public int getCount() 
       return mFragmentList.size();
    


RecyclerViewAdapter:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> 

private ViewPager mPager;

@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) 

    View view = LayoutInflater.from( viewGroup.getContext() ).inflate( R.layout.fragment_card_view_tabel, viewGroup, false );

    viewGroup.setOnClickListener( new View.OnClickListener() 

        @Override
        public void onClick(View view) 

        
     );

    return new RecyclerViewHolder( view );


@Override
public void onBindViewHolder(RecyclerViewHolder recyclerViewHolder, int i) 

    recyclerViewHolder.mBeskrivelse.setText( OurData.beskrivelse[i] );
    recyclerViewHolder.mTitle.setText( OurData.title[i] );
    recyclerViewHolder.cardView.setCardBackgroundColor( Color.parseColor( OurData.colors[i] ) );



@Override
public int getItemCount() 
    return OurData.title.length;



class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener 

    public int nummer;
    private TextView mBeskrivelse;
    private TextView mTitle;
    private CardView cardView;


    public RecyclerViewHolder(View itemView) 
        super( itemView );
        mPager = (ViewPager) itemView.findViewById( R.id.flMain );
        mBeskrivelse = (TextView) itemView.findViewById( R.id.item_beskrivelse );
        mTitle = (TextView) itemView.findViewById( R.id.item_title );
        cardView = (CardView) itemView.findViewById( R.id.card_view );
        itemView.setOnClickListener( this );

    


    @Override
    public void onClick(View v) 

        nummer = getAdapterPosition();

        if (nummer == 0) 
            //mPager.setCurrentItem(0);

            ((FragmentActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction().replace( R.id.flMain, new DataTabelFragment() ).commit();

         else if (nummer == 1) 

            ((FragmentActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction().replace( R.id.flMain, new Sensor1Fragment() ).commit();

         else if (nummer == 2) 

            ((FragmentActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction().replace( R.id.flMain, new Sensor2Fragment() ).commit();

         else if (nummer == 3) 

            ((FragmentActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction().replace( R.id.flMain, new Sensor3Fragment() ).commit();

        
       
    

带有异步任务的片段之一:

public class DataTabelFragment extends Fragment implements jsonAsynctask.DataTabelFragment 

public TextView sensor1;

jsonAsynctask jsonasynctask = new jsonAsynctask( this );


public DataTabelFragment() 
    // Required empty public constructor


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    // Inflate the layout for this fragment

    View view = inflater.inflate( R.layout.fragment_data_tabel, container, false );

    sensor1 = (TextView) view.findViewById( R.id.sensorAlleBox );

    jsonasynctask.execute();

    return view;



@Override
public void onJobFinishListener(List<String> allId) 
    //when this method is trigered by your asynctask
    //it means that you are in ui thread and update your ui component

    for (int i = 0; i < allId.size(); i++) 

        sensor1.append( jsonasynctask.allId.get( i ) + " | " + jsonasynctask.allDevice.get( i ) + " | " + jsonasynctask.allTemp.get( i ) + " | " + jsonasynctask.allHum.get( i ) + " | " + jsonasynctask.allBat.get( i ) + " | " + jsonasynctask.allMode.get( i ) + " | " + jsonasynctask.allLux.get( i ) + " | " + jsonasynctask.allDate_time.get( i ) + "\n\n" );

    
 


* 更新 *

ASYNCTASK 发生错误的片段:

public class SensorOversigtFragment extends Fragment implements jsonAsynctask.DataTabelFragment 

private TextView firstValue;
private TextView firstValue2;
private TextView firstDevice;
private TextView secondValue;
private TextView secondDevice;
private TextView secondValue2;

private ImageView firstImage, secondImage;

private View firstView, secondView;

private LinearLayout linear1, linear2;

jsonAsynctask jsonasynctask = new jsonAsynctask( this );

public SensorOversigtFragment() 
    // Required empty public constructor



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    // Inflate the layout for this fragment
    View view = inflater.inflate( R.layout.content_sensor_oversigt, container, false );

    firstValue = (TextView) view.findViewById( R.id.firstValue );
    firstDevice = (TextView) view.findViewById( R.id.firstDevice );
    firstValue2 = (TextView) view.findViewById( R.id.firstValue2 );
    secondDevice = (TextView) view.findViewById( R.id.secondDevice );
    secondValue = (TextView) view.findViewById( R.id.secondValue );
    secondValue2 = (TextView) view.findViewById( R.id.secondValue2 );

    linear1 = (LinearLayout) view.findViewById( R.id.linear1 );
    linear2 = (LinearLayout) view.findViewById( R.id.linear2 );

    firstImage = (ImageView) view.findViewById( R.id.firstImage );
    secondImage = (ImageView) view.findViewById( R.id.secondImage );

    firstView = (View) view.findViewById( R.id.firstView );
    secondView = (View) view.findViewById( R.id.secondView );

    if (jsonasynctask.getStatus() == AsyncTask.Status.RUNNING) 
        jsonasynctask.cancel( true );
     else if (jsonasynctask.getStatus() != AsyncTask.Status.RUNNING) 
        jsonasynctask.execute();
    

    return view;


@Override
public void onJobFinishListener(List<String> allId) 

    //System.out.println( "LAST MODE: " + jsonasynctask.allMode.get( allId.size() - 1 ) );

    for (int i = 0; i < allId.size(); i++) 

        if (jsonasynctask.allDevice.get( i ).equals( "B42DB2" )) 

            if (jsonasynctask.allMode.get( i ).equals( "0" )) 

                linear1.setBackgroundColor( Color.parseColor( "#A9A9A9" ) );
                firstDevice.setBackgroundColor( Color.parseColor( "#808080" ) );

                firstDevice.setText( "STANDBY MODE" );

                firstValue.setVisibility( View.GONE );
                firstValue2.setVisibility( View.GONE );

                firstImage.setColorFilter( Color.parseColor( "#A9A9A9" ) );
                firstView.setBackgroundColor( Color.parseColor( "#A9A9A9" ) );

             else if (jsonasynctask.allMode.get( i ).equals( "1" )) 

                linear1.setBackgroundColor( Color.parseColor( "#A0D468" ) );
                firstValue.setBackgroundColor( Color.parseColor( "#8CC152" ) );
                firstValue2.setBackgroundColor( Color.parseColor( "#8CC152" ) );
                firstDevice.setBackgroundColor( Color.parseColor( "#8CC152" ) );
                firstView.setBackgroundColor( Color.parseColor( "#A0D468" ) );

                firstImage.setImageResource( R.drawable.lighticon );

                firstValue.setText( jsonasynctask.allTemp.get( i ) + "°C" );
                firstValue2.setText( jsonasynctask.allHum.get( i ) + "%" );
                firstDevice.setText( jsonasynctask.allDevice.get( i ) );

                firstValue.setVisibility( View.VISIBLE );
                firstValue2.setVisibility( View.VISIBLE );

                firstImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

             else if (jsonasynctask.allMode.get( i ).equals( "2" )) 

                linear1.setBackgroundColor( Color.parseColor( "#FFCE54" ) );
                firstValue.setBackgroundColor( Color.parseColor( "#F68B42" ) );
                firstValue2.setBackgroundColor( Color.parseColor( "#F68B42" ) );
                firstDevice.setBackgroundColor( Color.parseColor( "#F68B42" ) );
                firstView.setBackgroundColor( Color.parseColor( "#FFCE54" ) );

                firstImage.setImageResource( R.drawable.light_bulb_7_512 );

                firstValue.setText( jsonasynctask.allLux.get( i ) );
                firstValue2.setText( "Lux" );
                firstDevice.setText( jsonasynctask.allDevice.get( i ) );

                firstValue.setVisibility( View.VISIBLE );
                firstValue2.setVisibility( View.VISIBLE );

                firstImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

             else if (jsonasynctask.allMode.get( i ).equals( "3" )) 

                linear1.setBackgroundColor( Color.parseColor( "#4FC1E9" ) );
                firstValue.setBackgroundColor( Color.parseColor( "#3BAFDA" ) );
                firstValue2.setBackgroundColor( Color.parseColor( "#3BAFDA" ) );
                firstDevice.setBackgroundColor( Color.parseColor( "#3BAFDA" ) );
                firstView.setBackgroundColor( Color.parseColor( "#4FC1E9" ) );

                firstImage.setImageResource( R.drawable.ic_baseline_meeting_room_24px );

                firstValue.setText( jsonasynctask.allDoor.get( i ) );
                firstValue2.setText( "Door" );
                firstDevice.setText( jsonasynctask.allDevice.get( i ) );

                firstValue.setVisibility( View.VISIBLE );
                firstValue2.setVisibility( View.VISIBLE );

                firstImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

             else if (jsonasynctask.allMode.get( i ).equals( "4" )) 

                linear1.setBackgroundColor( Color.parseColor( "#509CEC" ) );
                firstValue.setBackgroundColor( Color.parseColor( "#4A89DC" ) );
                firstValue2.setBackgroundColor( Color.parseColor( "#4A89DC" ) );
                firstDevice.setBackgroundColor( Color.parseColor( "#4A89DC" ) );
                firstView.setBackgroundColor( Color.parseColor( "#509CEC" ) );

                firstImage.setImageResource( R.drawable.vibration );

                firstValue.setText( jsonasynctask.allVib.get( i ) );
                firstValue2.setText( "Vib" );
                firstDevice.setText( jsonasynctask.allDevice.get( i ) );

                firstValue.setVisibility( View.VISIBLE );
                firstValue2.setVisibility( View.VISIBLE );

                firstImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

             else if (jsonasynctask.allMode.get( i ).equals( "5" )) 

                linear1.setBackgroundColor( Color.parseColor( "#EC87C0" ) );
                firstValue.setBackgroundColor( Color.parseColor( "#D770AD" ) );
                firstValue2.setBackgroundColor( Color.parseColor( "#D770AD" ) );
                firstDevice.setBackgroundColor( Color.parseColor( "#D770AD" ) );
                firstView.setBackgroundColor( Color.parseColor( "#EC87C0" ) );

                firstImage.setImageResource( R.drawable.ic_magnet );

                firstValue.setText( jsonasynctask.allMag.get( i ) );
                firstValue2.setText( "Mag" );
                firstDevice.setText( jsonasynctask.allDevice.get( i ) );

                firstValue.setVisibility( View.VISIBLE );
                firstValue2.setVisibility( View.VISIBLE );

                firstImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

            

         else if (jsonasynctask.allDevice.get( i ).equals( "B42DC6" )) 

            if (jsonasynctask.allMode.get( i ).equals( "0" )) 

                linear2.setBackgroundColor( Color.parseColor( "#A9A9A9" ) );
                secondDevice.setBackgroundColor( Color.parseColor( "#808080" ) );

                secondDevice.setText( "STANDBY MODE" );

                secondValue.setVisibility( View.GONE );
                secondValue2.setVisibility( View.GONE );

                secondImage.setColorFilter( Color.parseColor( "#A9A9A9" ) );
                secondView.setBackgroundColor( Color.parseColor( "#A9A9A9" ) );


             else if (jsonasynctask.allMode.get( i ).equals( "1" )) 

                linear2.setBackgroundColor( Color.parseColor( "#A0D468" ) );
                secondValue.setBackgroundColor( Color.parseColor( "#8CC152" ) );
                secondValue2.setBackgroundColor( Color.parseColor( "#8CC152" ) );
                secondDevice.setBackgroundColor( Color.parseColor( "#8CC152" ) );
                secondView.setBackgroundColor( Color.parseColor( "#A0D468" ) );

                secondImage.setImageResource( R.drawable.lighticon );

                secondValue.setText( jsonasynctask.allTemp.get( i ) + "°C" );
                secondValue2.setText( jsonasynctask.allHum.get( i ) + "%" );
                secondDevice.setText( jsonasynctask.allDevice.get( i ) );

                secondValue.setVisibility( View.VISIBLE );
                secondValue2.setVisibility( View.VISIBLE );

                secondImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

             else if (jsonasynctask.allMode.get( i ).equals( "2" )) 

                linear2.setBackgroundColor( Color.parseColor( "#FFCE54" ) );
                secondValue.setBackgroundColor( Color.parseColor( "#F68B42" ) );
                secondValue2.setBackgroundColor( Color.parseColor( "#F68B42" ) );
                secondDevice.setBackgroundColor( Color.parseColor( "#F68B42" ) );
                secondView.setBackgroundColor( Color.parseColor( "#FFCE54" ) );

                secondImage.setImageResource( R.drawable.light_bulb_7_512 );

                secondValue.setText( jsonasynctask.allLux.get( i ) );
                secondValue2.setText( "Lux" );
                secondDevice.setText( jsonasynctask.allDevice.get( i ) );

                secondValue.setVisibility( View.VISIBLE );
                secondValue2.setVisibility( View.VISIBLE );

                secondImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

             else if (jsonasynctask.allMode.get( i ).equals( "3" )) 

                linear2.setBackgroundColor( Color.parseColor( "#4FC1E9" ) );
                secondValue.setBackgroundColor( Color.parseColor( "#3BAFDA" ) );
                secondValue2.setBackgroundColor( Color.parseColor( "#3BAFDA" ) );
                secondDevice.setBackgroundColor( Color.parseColor( "#3BAFDA" ) );
                secondView.setBackgroundColor( Color.parseColor( "#4FC1E9" ) );

                secondImage.setImageResource( R.drawable.ic_baseline_meeting_room_24px );

                secondValue.setText( jsonasynctask.allDoor.get( i ) );
                secondValue2.setText( "Door" );
                secondDevice.setText( jsonasynctask.allDevice.get( i ) );

                secondValue.setVisibility( View.VISIBLE );
                secondValue2.setVisibility( View.VISIBLE );

                secondImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

             else if (jsonasynctask.allMode.get( i ).equals( "4" )) 

                linear2.setBackgroundColor( Color.parseColor( "#509CEC" ) );
                secondValue.setBackgroundColor( Color.parseColor( "#4A89DC" ) );
                secondValue2.setBackgroundColor( Color.parseColor( "#4A89DC" ) );
                secondDevice.setBackgroundColor( Color.parseColor( "#4A89DC" ) );
                secondView.setBackgroundColor( Color.parseColor( "#509CEC" ) );

                secondImage.setImageResource( R.drawable.vibration );

                secondValue.setText( jsonasynctask.allVib.get( i ) );
                secondValue2.setText( "Vib" );
                secondDevice.setText( jsonasynctask.allDevice.get( i ) );

                secondValue.setVisibility( View.VISIBLE );
                secondValue2.setVisibility( View.VISIBLE );

                secondImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

             else if (jsonasynctask.allMode.get( i ).equals( "5" )) 

                linear2.setBackgroundColor( Color.parseColor( "#EC87C0" ) );
                secondValue.setBackgroundColor( Color.parseColor( "#D770AD" ) );
                secondValue2.setBackgroundColor( Color.parseColor( "#D770AD" ) );
                secondDevice.setBackgroundColor( Color.parseColor( "#D770AD" ) );
                secondView.setBackgroundColor( Color.parseColor( "#EC87C0" ) );

                secondImage.setImageResource( R.drawable.ic_magnet );

                secondValue.setText( jsonasynctask.allMag.get( i ) );
                secondValue2.setText( "Mag" );
                secondDevice.setText( jsonasynctask.allDevice.get( i ) );

                secondValue.setVisibility( View.VISIBLE );
                secondValue2.setVisibility( View.VISIBLE );

                secondImage.setColorFilter( Color.parseColor( "#FFFFFF" ) );

            

        




     

    


【问题讨论】:

***.com/questions/23172042/… 我已经看过那个帖子,但它对我没有帮助。仍然崩溃 尝试将jsonasynctask的初始化移到onCreateView函数中。 嗨,克里希纳,感谢您的回答。如果我这样做,那么我在 onJobFinishListener 中的 jsonasynctasks 将不会被初始化 【参考方案1】:

对于 AsyncTask 崩溃是因为可能在您的片段实例上多次调用 onCreateView,尝试这样做以确保每次执行()调用您都有一个新实例

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    // Inflate the layout for this fragment

    View view = inflater.inflate( R.layout.fragment_data_tabel, container, false );

    sensor1 = (TextView) view.findViewById( R.id.sensorAlleBox );

    new jsonAsynctask( this ).execute();

    return view;

另一方面,如果您不喜欢一直创建新实例,请确保将调用包装在异步状态调用检查中,以确保您在运行时不会启动相同的异步:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
        // Inflate the layout for this fragment

        View view = inflater.inflate( R.layout.fragment_data_tabel, container, false );

        sensor1 = (TextView) view.findViewById( R.id.sensorAlleBox );

if(jsonasynctask.getState() != AsyncTask.Status.RUNNING)

        jsonasynctask.execute();


        return view;

    

最后,如果您在 AsyncTask 类中使用 Context,请确保使用 WeekReference 以确保您不会在 AsynTask 中持有强引用

【讨论】:

以上是关于Asynctask 崩溃 ViewPager RecyclerView (Android)的主要内容,如果未能解决你的问题,请参考以下文章

AsyncTask 在 ViewPager 的每个页面上运行

带有适配器“”的 ViewPager 需要 AsyncTask 中的视图 ID

如何在将 Tablayout 与 viewpager 一起使用时从另一个片段调用 AsyncTask?

如何从 ViewPager 的 onPageSelected AsyncTask 到 Fragments?

在 AsyncTask 上尝试使用 SQLite 检索数据的奇怪行为

ViewPager2 崩溃