如何在不使用SuppressWarning(“ uncheckedcast”)的情况下解决此问题,这种方法可以在投射对象之前检查对象,也可以通过其他任何方式解决此问题。
问题出在onLoadFinished()内部。如您所见,我将数据用于不同的数据类型,首先是布尔值,然后是List。
先感谢您。

 package com.howaboutthis.satyaraj.wallpaper;

import android.support.v4.app.Fragment;
import android.support.v4.content.Loader;
import android.content.Context;
import android.content.DialogInterface;
import android.support.v4.app.LoaderManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;

import java.util.List;
import java.util.Objects;


public class FragmentChanging extends Fragment implements LoaderManager.LoaderCallbacks  {

    private ProgressDialog dialog;

    public FragmentChanging(){
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup
    container,
                             Bundle savedInstanceState) {

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

     getLoaderMangaer.init(0,null,FragmentChanging.this);

        return view;
    }

    @Override
    public Loader onCreateLoader(int id, Bundle args) {
        if (id == 0 || id == 2){
            dialog.setMessage("Loading Settings...");
            dialog.show();
              }
            return new TestInternetLoader(getContext());
              }

        return null;
    }


    @Override
    public void onLoadFinished(Loader loader, Object data) {
        int id = loader.getId();

        if (id == 0 || id == 2){
            boolean check = (Boolean) data;
            if (check)
                if (dialog.isShowing()) dialog.dismiss();
        }
        else if(id == 3)
            List<Bitmap> bitmaps = (List<Bitmap>) data;  //Unchecked cast

    }

    @Override
    public void onLoaderReset(Loader loader) {

    }

}

最佳答案

您可以使用LoaderManager.LoaderCallbacks<List<Bitmap>>消除棉绒警告。如果要这样做,则必须(几乎)将每次出现的Loader更改为Loader<List<Bitmap>>
(一个例外似乎是onLoaderReset(Loader loader)

此外,如果使用自定义AsyncTaskLoader,则必须扩展AsyncTaskLoader<List<Bitmap>>

那你可以写

@Override
public void onLoadFinished(Loader<List<Bitmap>> loader, List<Bitmap> data) {

    List<Bitmap> bitmaps = data;
}


编辑

如果由于数据类型可能不同而无法采用建议的方法,则可以按以下方式检查要处理的类型:

if (data instanceof List<?>){
    List temp = (List)data;
    // do what's required for List data
    // (if necessary do a type check on list elements)
    if (tempList.size() > 0){
        Object firstItem = tempList.get(0);
        if (firstItem instanceof Bitmap){
            // now you know that your Loader gave you a List with at least one Bitmap
            List<Bitmap> bitmaps = new ArrayList<>();
            for (Object item: tempList){
                if (item instanceof Bitmap){
                    bitmaps.add((Bitmap) item);
                }
            }
        }
    }
}
else if (data instanceof Boolean){
   boolean check = (Boolean) data;
        if (check){
            // handle Boolean data
        }
}

08-18 06:02
查看更多