嵌套类AsyncTask无法修改外类静态对象

时间:2016-09-04 13:55:43

标签: java android class android-asynctask inner-classes

我遇到嵌套java类的问题,它看到了外部类对象,但不知何故无法修改它。我读了很多类似的问题但是找不到这个问题的解决方案。这可能是非常简单的事情,但我还不够清楚。 我有Sorter类在后台做一些计算,我决定使用AsyncTask在UI Thread之外执行那些计算。 我的班级看起来像这样

public class Sorter
{
    private static List<Long> workingList;
    private static int _numberOfContainers, _containerSize, _timesToRepeat;
    private static Long _numbersFrom, _numbersTo, _sortingAlgorithmId;

    public Sorter(int numberOfContainers, int containerSize, Long numbersFrom, Long numbersTo,
                  int timesToRepeat, Long sortingAlgorithmId)
    {
        _numberOfContainers = numberOfContainers;
        _containerSize = containerSize;
        _numbersFrom = numbersFrom;
        _numbersTo = numbersTo;
        _timesToRepeat = timesToRepeat;
        _sortingAlgorithmId = sortingAlgorithmId;
        // perform calculations in the background
        new BackgroundCalculations().execute();
    }

    static class BackgroundCalculations extends AsyncTask<Void,Void,Void>
    {

        @Override
        protected Void doInBackground(Void... voids)
        {
            workingList = new ArrayList<>(_containerSize);
            // workingList is still null after this
            _numbersTo += 1; // to fix exclusive number range to inclusive
            Random rand = new Random();
            for (int i = 0; i < _containerSize; i++)
            {
                workingList.add((long) (rand.nextDouble() * (_numbersTo - _numbersFrom)) + _numbersFrom))
            }
            // some calc
            return null;
        }
    }


}

我尝试在Sorter构造函数中实例化workingList,但是嵌套类无论如何都无法将项添加到workingList。有解决方案吗也许更好的方法来实现没有这些问题的背景计算?

1 个答案:

答案 0 :(得分:0)

你在这里混淆了两个概念。

你的方法都是静态的;你的领域是两个。那么你为什么要使用构造函数呢?表明您希望实例化Sorter类的对象?

因此,首先要解决您的问题 - 更好地理解您正在使用的概念。