有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

由于Id错误,java无法获取文本

我试图解决这个问题已经有一段时间了,但似乎不起作用。我在下面的代码块中的这一行school.setClasses(classesName.getText().toString());上得到一个空指针异常

这是实际发布到SQLite数据库的代码

 public void postSchoolSetuptoSQLite() {

        school.setSchoolName(nameOfSchool.getText().toString());
        school.setSchoolLocation(schoolLocation.getText().toString());
        school.setClasses(classesName.getText().toString());
        academeaSQL.addSchool(school);

        if (demeaSQL != null) {
            StringBuilder sb = new StringBuilder();
            for (School s : demeaSQL.getAllSchools()) {
                sb.append(" SchoolName= " + s.getSchoolName() + " SchoolLocation= " + s.getSchoolLocation()
                        + " ClassName= " + s.getClasses());
                sb.append("\n");
            }
            Log.i("Database content", sb.toString());

            Toast.makeText(getApplicationContext(), "Added Successfully", Toast.LENGTH_LONG).show();

        } else {
            Log.i("Database Err", "Database Error");
        }



    }

我通过此onAddField方法单击“添加新类”按钮,动态创建classesName的字段

public void onAddField(View v) {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

         rowView = inflater.inflate(R.layout.field, null);

        rowView.setId(ViewIdGenerator.generateViewId());


        // Add the new row before the add field button.
        parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount() - 1);

        Log.i("ids", String.valueOf(rowView.getId()));
    }

字段Id是通过ViewIdGenerator类动态生成的

从该代码块中动态创建的字段获取ID时,错误出现在此时classesName = rowView.findViewById(rowView.getId());

public void findByIds() {

        rowView = new View(this);

        parentLinearLayout = findViewById(R.id.parent_linear_layout);

        nameOfSchool = findViewById(R.id.nameOfSchool);

        schoolLocation = findViewById(R.id.schoolLocation);

        addSchoolAndMoveNext = findViewById(R.id.addSchoolAndMoveNext);


            classesName = rowView.findViewById(rowView.getId());

            Log.i("Classname", String.valueOf(classesName));
            Log.i("SchoolLoca", String.valueOf(schoolLocation));

    }

这里是我调用findByIds();

 @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_school_search_setup);

        findByIds();
        intitializeListeners();
        initializeObjects();





    }

对于空指针异常。错误指向这些区域

school.setClasses(classesName.getText().toString());

classesName = rowView.findViewById(rowView.getId());

请说明为什么会出现nullpointer异常,以及如何解决它。非常感谢。我将非常感谢你的回答


共 (1) 个答案

  1. # 1 楼答案

    您的问题是,如果您在onCreate()内调用findByIds(),那么rowView.getId()将返回null,因为您在按下按钮后在默认id生成器中设置idonCreate()在活动首次启动时被调用

    当你点击按钮时,看起来你正在尝试添加一个类列表。在Android中,有一些内置的方法可以实现这一点,它们的开销比你正在做的事情要大一些(就实现所需的时间而言),但在滚动、添加新类、删除类等方面,它们将更加可靠

    为了做到这一点,查看recyclerview

    在RecyclerView部分的显示光标内容的内部here将向您展示如何将数据库中的数据添加到RecyclerView