Android 应用程序崩溃并引发空指针异常

Android 应用程序崩溃并引发空指针异常,android,Android,我单击此活动后,我的应用程序立即崩溃。它正在抛出NullPointerException。谁能告诉我我犯了什么错误 这是我的SettingActivity.java文件代码: package com.homeautomation.activity; import com.homeautomation.database.DBAdapter; import android.os.Bundle; import android.text.TextUtils; import android.view.

我单击此活动后,我的应用程序立即崩溃。它正在抛出NullPointerException。谁能告诉我我犯了什么错误

这是我的SettingActivity.java文件代码:

package com.homeautomation.activity;

import com.homeautomation.database.DBAdapter;

import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.Toast;

public class SettingsActivity extends BaseActivity {
    private EditText PasswordEdit;
    private EditText ConfirmPasswordEdit;
    private Button submit;
    private String Password;
    private String ConfirmPassword;
    private DBAdapter homeAuotmationDBAdapher;

    private Switch switchconfig;
    private int notifications = 0;
    private TextView switchStatus;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initViewControls();
        if (savedInstanceState == null) {
            onlySelectItem(4);
        }
        initializeDB();
    }

    public void initViewControls() {

        LayoutInflater inflater = (LayoutInflater) SettingsActivity.this
                .getSystemService(SettingsActivity.this.LAYOUT_INFLATER_SERVICE);
        LinearLayout myView = (LinearLayout) inflater.inflate(
                R.layout.activity_settings, null);
        flContainer.addView(myView);

        PasswordEdit = (EditText) findViewById(R.id.txtPassword);
        ConfirmPasswordEdit = (EditText) findViewById(R.id.txtConfirmPass);
        submit = (Button) findViewById(R.id.btnSubmit);



        submit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                Password = PasswordEdit.getText().toString();
                ConfirmPassword = ConfirmPasswordEdit.getText().toString();

                if (TextUtils.isEmpty(Password)) {
                    PasswordEdit
                            .setError(getString(R.string.error_field_required));

                } else if (TextUtils.isEmpty(ConfirmPassword)) {
                    ConfirmPasswordEdit
                            .setError(getString(R.string.error_field_required));

                }

                else if (!Password.equals(ConfirmPassword)) {
                    ConfirmPasswordEdit
                            .setError(getString(R.string.error_field_required));
                }

                else {
                    SettingsActivity.this.homeAuotmationDBAdapher.updatePassword(Password);
                    SettingsActivity.this.homeAuotmationDBAdapher.updateNotification(SettingsActivity.this.notifications);
                    Toast.makeText(getApplicationContext(), "PASSWORD UPDATED SUCCESFULLY!!! =)",
                               Toast.LENGTH_LONG).show();
                }

            }

        });


          switchconfig = (Switch) findViewById(R.id.swNotification);
          if(this.homeAuotmationDBAdapher.getNotification()==1){
              switchconfig.setChecked(true);
          }else{
              switchconfig.setChecked(false);
          }
          switchconfig.setOnCheckedChangeListener(new OnCheckedChangeListener() {

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

            if(isChecked){
                SettingsActivity.this.notifications = 1;
            }else{
                SettingsActivity.this.notifications = 0;
            }

           }
          });


          if(switchconfig.isChecked()){
           switchStatus.setText("Switch is currently ON");
          }
          else {
           switchStatus.setText("Switch is currently OFF");
          } 

    }
    private void initializeDB() {

        this.homeAuotmationDBAdapher = new DBAdapter(SettingsActivity.this);
        this.homeAuotmationDBAdapher.openDatabase();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // getMenuInflater().inflate(R.menu.settings, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // The action bar home/up action should open or close the drawer.
        // ActionBarDrawerToggle will take care `enter code here`of this.
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action buttons
        switch (item.getItemId()) {
        default:
            return super.onOptionsItemSelected(item);
        }
    }

}
您尚未在onCreate中的任何位置调用setContentView。在调用任何findViewById之前,您需要在调用super之后调用它。onCreate

flContainer未初始化

 PasswordEdit = (EditText) findViewById(R.id.txtPassword);
将为您提供NUllPointerException,因为findViewById将在当前扩展的布局中查找视图。您没有setContentViewR.layout.mylayout

此外,如果您对布局进行充气,则需要将其设置为“活动”。

尝试此操作

在initViewControls方法中


请更改应用程序中的上述代码。我希望它对您有用。

您可以发布崩溃跟踪吗?也可以发布BaseActivity
    LayoutInflater inflater = (LayoutInflater) SettingsActivity.this
            .getSystemService(SettingsActivity.this.LAYOUT_INFLATER_SERVICE);
    View myView = (View) inflater.inflate(
            R.layout.activity_settings, null);
    flContainer.addView(myView);

    PasswordEdit = (EditText) myView.findViewById(R.id.txtPassword);
    ConfirmPasswordEdit = (EditText) myView.findViewById(R.id.txtConfirmPass);
    submit = (Button) myView.findViewById(R.id.btnSubmit);
 LayoutInflater inflater = (LayoutInflater) SettingsActivity.this
            .getSystemService(SettingsActivity.this.LAYOUT_INFLATER_SERVICE);
    View myView = (View) inflater.inflate(
            R.layout.activity_settings, null);
    flContainer.addView(myView); 

PasswordEdit = (EditText)myView . findViewById(R.id.txtPassword);
        ConfirmPasswordEdit = (EditText)myView . findViewById(R.id.txtConfirmPass);
        submit = (Button) myView .findViewById(R.id.btnSubmit);