Как я могу разрешить переменную, которую я пытался передать в адаптер карты, который я пытался извлечь из SQL-курсора - PullRequest
0 голосов
/ 28 декабря 2018

Ide сообщает мне, что не может разрешить символы, которые я вставил в параметры ProjectsCardAdapter.символы являются переменными внутри блока try, который содержит строковый тип из курсора

Я попытался инициализировать переменные строкового массива вне блока try, но понял, что мне нужно получить getCount, сколько строк будет иметь курсор для инициализациистроковые массивы.

public class ProjectsFragment extends Fragment {

    public ProjectsFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        RecyclerView projectsRecycler = (RecyclerView) inflater.inflate(
                R.layout.fragment_projects, container, false);

        try {
            SQLiteOpenHelper projectsDBhelper = new ProjectsDBhelper(inflater.getContext());
            SQLiteDatabase db = projectsDBhelper.getReadableDatabase();
            Cursor cursor = db.query("PROJECTS",
                    new String[]{"PROJ_STAGE", "PROJ_BUDGET", "PROJ_LOC", "CLIENT_NAME"}
                    , null
                    , null, null, null, null);

            int rowCount = cursor.getCount();
            String[] projStage = new String[rowCount];
            String[] projBudget = new String[rowCount];
            String[] projLoc = new String[rowCount];
            String[] clientName = new String[rowCount];
            int i = 0;
            Float floatBudget;

            if (cursor.moveToFirst()) {

                projStage[i] = cursor.getString(0);
                floatBudget = cursor.getFloat(1);
                projLoc[i] = cursor.getString(2);
                clientName[i] = cursor.getString(3);

                projBudget[i] = String.format("%,.2f", floatBudget.toString());

            cursor.close();
            db.close();

        } catch (SQLiteException e) {

            Toast exceptionToast = Toast.makeText(inflater.getContext(), "Database unavailable", Toast.LENGTH_SHORT);
            exceptionToast.show();

        }
        //This is the ProjectsCardAdapter that couldnt resolve the symbol
        ProjectsCardAdapter projectsCardAdapter = new ProjectsCardAdapter(projStage, projBudget, projLoc, clientName);
        projectsRecycler.setAdapter(projectsCardAdapter);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        projectsRecycler.setLayoutManager(layoutManager);
        return projectsRecycler;
    }
}

Я хотел протестировать просмотр карты, отображающий набор текстов с использованием данных из SQLite, но адаптер не может взять переменные из курсора

1 Ответ

0 голосов
/ 28 декабря 2018

Ваша проблема в том, что projStage , projBudget , projLoc и clientName объявляются в try и, следовательно, имеют область видимости только в пределах блока try .

Следующее действие увеличит область видимости до метода onCreateView : -

public class ProjectsFragment extends Fragment {

    public ProjectsFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        RecyclerView projectsRecycler = (RecyclerView) inflater.inflate(
                R.layout.fragment_projects, container, false);
        String[] projStage;
        String[] projBudget;
        String[] projLoc;
        String[] clientName;

        try {
            SQLiteOpenHelper projectsDBhelper = new ProjectsDBhelper(inflater.getContext());
            SQLiteDatabase db = projectsDBhelper.getReadableDatabase();
            Cursor cursor = db.query("PROJECTS",
                    new String[]{"PROJ_STAGE", "PROJ_BUDGET", "PROJ_LOC", "CLIENT_NAME"}
                    , null
                    , null, null, null, null);

            int rowCount = cursor.getCount();
            projStage = new String[rowCount];
            projBudget = new String[rowCount];
            projLoc = new String[rowCount];
            clientName = new String[rowCount];
            int i = 0;
            Float floatBudget;

            if (cursor.moveToFirst()) {
                projStage[i] = cursor.getString(0);
                floatBudget = cursor.getFloat(1);
                projLoc[i] = cursor.getString(2);
                clientName[i] = cursor.getString(3);
                projBudget[i] = String.format("%,.2f", floatBudget.toString());

            cursor.close();
            db.close();

        } catch (SQLiteException e) {

            Toast exceptionToast = Toast.makeText(inflater.getContext(), "Database unavailable", Toast.LENGTH_SHORT);
            exceptionToast.show();

        }
        //This is the ProjectsCardAdapter that couldnt resolve the symbol
        ProjectsCardAdapter projectsCardAdapter = new ProjectsCardAdapter(projStage, projBudget, projLoc, clientName);
        projectsRecycler.setAdapter(projectsCardAdapter);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        projectsRecycler.setLayoutManager(layoutManager);
        return projectsRecycler;
    }
}
  • Обратите внимание, это принципиальный код.Код не был протестирован или запущен и поэтому может содержать ошибки.
...