【问题标题】:Putting a String ArrayList into SQLite Database将字符串 ArrayList 放入 SQLite 数据库
【发布时间】:2016-09-08 16:31:43
【问题描述】:

我无法将整个字符串正确放入我的数组列表中。我假设该错误与我的自定义 textwatcher 或我如何循环遍历数组列表有关。这是我的代码:

      case R.id.action_add:
                Workout workout = new Workout("", "", "", "");
                workoutList.add(workout);

                ListView exerciseList = (ListView) findViewById(R.id.exerciseListView);
                CustomAdapter myAdapter = new CustomAdapter(this, R.layout.custom_list, workoutList);
                exerciseList.setAdapter(myAdapter);

                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    public class CustomAdapter extends ArrayAdapter<Workout> {

        private int layoutResource;

        public CustomAdapter(Context context, int layoutResource, List<Workout> workoutList) {
            super(context, layoutResource, workoutList);
            this.layoutResource = layoutResource;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View view = convertView;

            if (view == null) {
                LayoutInflater layoutInflater = LayoutInflater.from(getContext());
                view = layoutInflater.inflate(layoutResource, null);

            }

            Workout workout = getItem(position);

            if (workout != null) {
                final EditText exercise = (EditText) view.findViewById(R.id.exercise);
                final EditText reps = (EditText) view.findViewById(R.id.reps);
                final EditText sets = (EditText) view.findViewById(R.id.sets);

                if (exercise != null){
                    exercise.addTextChangedListener(new CustomWatcher(exercise));
                }

                if (reps != null) {
                    reps.addTextChangedListener(new CustomWatcher(reps));
                }

                if (sets != null) {
                    sets.addTextChangedListener(new CustomWatcher(sets));
                }
            }

            return view;
        }
    }
    //Textwatcher class
    class CustomWatcher implements TextWatcher {

        private View view;
        public CustomWatcher(View view) {
            this.view = view;
        }

        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
        public void afterTextChanged(Editable editable) {
            String text = editable.toString();
            switch (view.getId()) {

                //exercises
                case R.id.exercise:
                   exercises.add(text);
                    break;
                //reps
                case R.id.reps:
                   reps.add(text);
                    break;
                //sets
                case R.id.sets:
                    sets.add(text);
                    break;
            }
        }
    }
}

箱子是按钮。因此,当我单击添加按钮时,我试图将自定义列表视图添加到包含三个文本视图的页面中。然后,当我单击保存时,我试图让它将每个编辑文本位置的数据保存到数组列表中以存储到我的数据库中。

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection for menu
        switch (item.getItemId()) {
            case R.id.action_save:

                String title = MyWorkoutsActivity.workouts.get(workoutID);
                String ex;
                String rp;
                String st;
                SQLDatabase db = new SQLDatabase(this);
                for(int i = 0; i < workoutList.size(); i++){
                   //exercises, reps, and sets always same number so only one for loop needed
                    ex = exercises.get(i);
                    rp = reps.get(i);
                    st = sets.get(i);
                    db.addExercise(new Workout(title, ex, rp, st));

                }
                List<Workout> workouts = db.getAllExercises();

                for (Workout wo : workouts) {
                    String log = "Workout " + wo.getWorkout() + "Exercise " + wo.getExercise()  + " ,Reps " + wo.getReps() + " ,Sets " + wo.getSets();
                    // Writing workouts to log
                    Log.d("Workout ", log);
                }
                Intent intent = new Intent(this, MyWorkoutsActivity.class);
                startActivity(intent);

                return true;

【问题讨论】:

    标签: java android sqlite arraylist


    【解决方案1】:

    发生这种情况是因为监听器方法 afterTextChanged 在输入第一个字母之后被午餐,因此它将第一个字母保存到列表中,依此类推 直到你得到一个字符列表。

    解决方案是:根本不使用 textwatcher,因为您想在用户按下保存按钮时保存数据,因此在按下按钮时将数据添加到练习列表中,如下所示:

    public void onClick(View view){
        //the exercise and reps and sets are the EditText fields that you have
        exercises.add(exercise.getText());
        exercises.add(reps.getText());
        exercises.add(sets.getText());
    
    }
    

    【讨论】:

    • 非常感谢!唯一的问题是我将如何分别引用每个列表视图行来添加编辑文本数据?它不是固定的行数,行数与用户按下添加新的次数一样多。
    • 我认为本教程会有所帮助:tutorialspoint.com/android/android_list_view.htm 如果您不想动态更改列表(保存按钮与列表视图位于不同的活动中),这将为您解决问题/跨度>
    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多