带有Annotations的null对象引用上的setText

时间:2017-06-30 13:41:02

标签: java android android-annotations

IT不重复,没有ANDROIDANNOTATIONS的相同APP也能正常使用。

我的应用程序已停止工作,因此使用AndroidAnnotations Framework修改项目。在我看来,一切看起来都不错,AndroidStudio中没有警告,直到在手机上运行,​​应用程序出错:

  

java.lang.RuntimeException:无法启动活动   ComponentInfo {com.example.annotationstest / com.example.annotationstest.MainActivity_}:   java.lang.NullPointerException:尝试调用虚方法' void   android.widget.TextView.setText(java.lang.CharSequence中)'在null   对象参考

我应该修复或添加到代码中?

MainActivity

 @EActivity(R.layout.activity_main)
    public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {

        private static final String SHARED_PREFS_NAME = "abc";
        public static final int REQUEST_CODE = 100;
        private int number;

        @ViewById(R.id.tv2)
        TextView tv2;

        @ViewById(R.id.tv3)
        TextView tv3;

        @ViewById(R.id.switch1)
        Switch switch1;


        @Click
        void b1() {
            Intent intent = new Intent(MainActivity.this, Main2Activity.class);
            startActivityForResult(intent, REQUEST_CODE);
        }


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

            SharedPreferences preferences = getSharedPreferences(SHARED_PREFS_NAME, MODE_PRIVATE);
            number = preferences.getInt("NUMBER", 0);
            tv2.setText(""+number);
            switch1.setOnCheckedChangeListener(this);

        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == RESULT_OK) {
                if (requestCode == REQUEST_CODE) {
                    number = data.getExtras().getInt("number");
                    tv2.setText("" + number);
                    saveNumberToSharedPrefs(number);

                }
            }
        }

        private void saveNumberToSharedPrefs(int num) {
            SharedPreferences preferences = getSharedPreferences(SHARED_PREFS_NAME, MODE_PRIVATE); 
            preferences.edit().putInt("NUMBER", num).apply(); 
        }

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            switch (buttonView.getId()) {
                case R.id.switch1:
                    if (isChecked == true) {
                        tv3.setVisibility(View.VISIBLE);
                    } else {
                        tv3.setVisibility(View.INVISIBLE);
                    }
                    break;
            }

        }
    }

1 个答案:

答案 0 :(得分:1)

根据文档,可能尚未在onCreate()方法中注入视图(请参阅here):

  

调用onCreate()时,尚未设置@ViewById字段。因此,您可以在方法上使用@AfterViews来编写依赖于视图的代码。

也就是说,您应该将代码从onCreate()移到新方法并使用@AfterViews

进行注释