EditText上的空指针异常

时间:2013-09-07 10:08:17

标签: android

我有5个editTexts,它们是SharedPreferences内的商店值。但似乎每次我呼吁这些值时,我都会得到NullPointerException

布局:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/smsSettingsBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/ssBackPadding"
        android:src="@drawable/ic_upblue" />

    <ImageView
        android:id="@+id/smsIconSettings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:src="@drawable/ic_smsblue" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/smsIconSettings"
        android:layout_centerHorizontal="true"
        android:text="Quick SMS"
        android:textColor="@color/settingsTitleFont"
        android:textSize="@dimen/iconOptionsSize" />
</RelativeLayout>

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/ssllMarginSides"
        android:layout_marginRight="@dimen/ssllMarginSides"
        android:layout_marginTop="@dimen/ssllMarginTop"
        android:orientation="vertical"
        android:padding="@dimen/smallPadding" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Quick SMS settings"
            android:textColor="@color/settingsTitleFont"
            android:textSize="@dimen/ssqsText" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/ssqsDesMarginTop"
            android:text="@string/smsSettingsBody"
            android:textColor="@color/settingsBodyFont"
            android:textSize="@dimen/ssqsDesTextSize" />

        <EditText
            android:id="@+id/phoneNumber1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/ssETMarginTop"
            android:hint="Enter Mobile Number"
            android:inputType="number" />

        <TextView
            android:id="@+id/addMe1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/ssAddNoMarginTop"
            android:text="@string/addNumber"
            android:textColor="@color/settingsTitleFont"
            android:textSize="@dimen/ssAddNoTextSize" />

        <LinearLayout
            android:id="@+id/removeable1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:visibility="gone" >

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" >

                <EditText
                    android:layout_width="fill_parent"
                    android:phoneNumber="@+id/phoneNumber2"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/sshlETMarginTop"
                    android:hint="Enter Mobile Number"
                    android:inputType="number" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentRight="true"
                    android:paddingBottom="7dp"
                    android:paddingRight="10dp"
                    android:text="Remove"
                    android:id="@+id/removeMe1"
                    android:textColor="@color/redText"
                    android:textSize="@dimen/ssAddNoTextSize" />
            </RelativeLayout>

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/ssAddNoMarginTop"
                android:text="@string/addNumber"
                android:id="@+id/addMe2"
                android:textColor="@color/settingsTitleFont"
                android:textSize="@dimen/ssAddNoTextSize" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/removeable2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:visibility="gone" >

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" >

                <EditText
                    android:layout_width="fill_parent"
                    android:phoneNumber="@+id/phoneNumber3"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/sshlETMarginTop"
                    android:hint="Enter Mobile Number"
                    android:inputType="number" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentRight="true"
                    android:paddingBottom="7dp"
                    android:paddingRight="10dp"
                    android:text="Remove"
                    android:id="@+id/removeMe2"
                    android:textColor="@color/redText"
                    android:textSize="@dimen/ssAddNoTextSize" />
            </RelativeLayout>

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/ssAddNoMarginTop"
                android:text="@string/addNumber"
                android:id="@+id/addMe3"
                android:textColor="@color/settingsTitleFont"
                android:textSize="@dimen/ssAddNoTextSize" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/removeable3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:visibility="gone" >

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" >

                <EditText
                    android:layout_width="fill_parent"
                    android:phoneNumber="@+id/phoneNumber4"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/sshlETMarginTop"
                    android:hint="Enter Mobile Number"
                    android:inputType="number" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentRight="true"
                    android:paddingBottom="7dp"
                    android:paddingRight="10dp"
                    android:text="Remove"
                    android:id="@+id/removeMe3"
                    android:textColor="@color/redText"
                    android:textSize="@dimen/ssAddNoTextSize" />
            </RelativeLayout>

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/ssAddNoMarginTop"
                android:text="@string/addNumber"
                android:id="@+id/addMe4"
                android:textColor="@color/settingsTitleFont"
                android:textSize="@dimen/ssAddNoTextSize" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/removeable4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:visibility="gone" >

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" >

                <EditText
                    android:layout_width="fill_parent"
                    android:phoneNumber="@+id/phoneNumber5"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="@dimen/sshlETMarginTop"
                    android:hint="Enter Mobile Number"
                    android:inputType="number"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentRight="true"
                    android:paddingBottom="7dp"
                    android:paddingRight="10dp"
                    android:text="Remove"
                    android:id="@+id/removeMe4"
                    android:textColor="@color/redText"
                    android:textSize="@dimen/ssAddNoTextSize" />
            </RelativeLayout>

        </LinearLayout>

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/helpDespTVMarginTop"
            android:text="@string/helpMessage"
            android:textColor="@color/settingsBodyFont"
            android:textSize="@dimen/helpDespTVTextSize" />

        <EditText
            android:id="@+id/helpMessage"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/helpMessageTextSize"
            android:background="@drawable/textview_shape"
            android:padding="@dimen/helpMessagePadding"
            android:text="@string/helpMessageBody"
            android:textColor="#333333"
            android:textSize="@dimen/helpMessageTextSize" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/helpDespTVMarginTop"
            android:text="Send Quick SMS after:"
            android:textColor="@color/settingsBodyFont"
            android:textSize="@dimen/helpDespTVTextSize" />

        <RelativeLayout
            android:layout_width="150dp"
            android:layout_height="wrap_content" >

            <EditText
                android:id="@+id/delayTimer"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="5dp"
                android:paddingLeft="30dp"
                android:text="5"
                android:textColor="#333333"
                android:textSize="30sp" />

            <TextView
                android:id="@+id/secTV"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:paddingBottom="10dp"
                android:paddingRight="10dp"
                android:text="seconds"
                android:textColor="@color/settingsBodyFont"
                android:textSize="14sp" />
        </RelativeLayout>

        <Button
            android:id="@+id/saveNumbers"
            android:layout_width="fill_parent"
            android:layout_height="@dimen/ssSaveButtonHeight"
            android:layout_marginTop="@dimen/ssSaveButtonMarginTop"
            android:background="@drawable/button_save"
            android:text="Save"
            android:textColor="#FFFFFF"
            android:textSize="@dimen/actionButton" />
    </LinearLayout>
</ScrollView>

初步声明:

TextView addMe1, addMe2, addMe3, addMe4, removeMe1, removeMe2, removeMe3, removeMe4;


LinearLayout editMessage;

EditText helpMessage;

Button saveState;

EditText delayTimer;
TextView secTV;


ImageView smsSettingsBack;

SharePrefManager SM;

内置onCreate:

EditText phoneNumber1, phoneNumber2, phoneNumber3, phoneNumber4, phoneNumber5;

LinearLayout removeable1, removeable2, removeable3, removeable4; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub11
    super.onCreate(savedInstanceState);
    setContentView(R.layout.quick_sms_settings);
    SM = new SharePrefManager(getApplicationContext());

    smsSettingsBack = (ImageView)findViewById(R.id.smsSettingsBack);


    phoneNumber1 = (EditText)findViewById(R.id.phoneNumber1);
    phoneNumber2 = (EditText)findViewById(R.id.phoneNumber2);
    phoneNumber3 = (EditText)findViewById(R.id.phoneNumber3);
    phoneNumber4 = (EditText)findViewById(R.id.phoneNumber4);
    phoneNumber5 = (EditText)findViewById(R.id.phoneNumber5);

    removeable1 = (LinearLayout)findViewById(R.id.removeable1);
    removeable2 = (LinearLayout)findViewById(R.id.removeable2);
    removeable3 = (LinearLayout)findViewById(R.id.removeable3);
    removeable4 = (LinearLayout)findViewById(R.id.removeable4);

    addMe1 = (TextView)findViewById(R.id.addMe1);
    addMe2 = (TextView)findViewById(R.id.addMe2);
    addMe3 = (TextView)findViewById(R.id.addMe3);
    addMe4 = (TextView)findViewById(R.id.addMe4);

    removeMe1 = (TextView)findViewById(R.id.removeMe1);
    removeMe2 = (TextView)findViewById(R.id.removeMe2);
    removeMe3 = (TextView)findViewById(R.id.removeMe3);
    removeMe4 = (TextView)findViewById(R.id.removeMe4);

    secTV = (TextView)findViewById(R.id.secTV);
    Utils.TypeFaceLight(secTV, getAssets());

    delayTimer = (EditText)findViewById(R.id.delayTimer);
    String timerTime = String.valueOf(SM.getTimer()/1000);
    delayTimer.setText(timerTime);
    Utils.TypeFaceET(delayTimer, getAssets());

    saveState = (Button)findViewById(R.id.saveNumbers);
    Utils.TypeFaceButton(saveState, getAssets());

    helpMessage = (EditText)findViewById(R.id.helpMessage);
    String message = SM.getHelpMessage();
    helpMessage.setText(message);

    smsSettingsBack.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            finish();
        }
    });

    if(!SM.getValue(SM.KEY_NUMBER1).equalsIgnoreCase("")){
        phoneNumber1.setText(SM.getValue(SM.KEY_NUMBER1));
    }else{
        phoneNumber1.setText("");
    }
    if(!SM.getValue(SM.KEY_NUMBER2).equalsIgnoreCase("")){
        phoneNumber2.setText(SM.getValue(SM.KEY_NUMBER2));
        addLayout(removeable1);
        removeTextView(addMe1);
    }else{
        phoneNumber2.setText("");
    }
    if(!SM.getValue(SM.KEY_NUMBER3).equalsIgnoreCase("")){
        phoneNumber3.setText(SM.getValue(SM.KEY_NUMBER3));
        addLayout(removeable2);
        removeTextView(addMe2);
    }else{
        phoneNumber3.setText("");
    }
    if(!SM.getValue(SM.KEY_NUMBER4).equalsIgnoreCase("")){
        phoneNumber4.setText(SM.getValue(SM.KEY_NUMBER4));
        addLayout(removeable3);
        removeTextView(addMe3);
    }else{
        phoneNumber4.setText("");
    }
    if(!SM.getValue(SM.KEY_NUMBER5).equalsIgnoreCase("")){
        phoneNumber5.setText(SM.getValue(SM.KEY_NUMBER5));
        addLayout(removeable4);
        removeTextView(addMe4);
    }else{
        phoneNumber5.setText("");
    }

    Log.i("PHONE 1", phoneNumber1.getText().toString());
    Log.i("PHONE 2", phoneNumber2.getText().toString());

    saveState.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            if(phoneNumber1.getText().toString().length()<2){
                Toast.makeText(getApplicationContext(), "Please set number to save.", Toast.LENGTH_LONG).show();
            }else{
                String number1 = phoneNumber1.getText().toString();
                String number2 = phoneNumber2.getText().toString();
                String number3 = phoneNumber3.getText().toString();
                String number4 = phoneNumber4.getText().toString();
                String number5 = phoneNumber5.getText().toString();
                String message = helpMessage.getText().toString();
                String timer = delayTimer.getText().toString();
                SM.setValue(SM.KEY_NUMBER1, number1);
                SM.setValue(SM.KEY_NUMBER2, number2);
                SM.setValue(SM.KEY_NUMBER3, number3);
                SM.setValue(SM.KEY_NUMBER4, number4);
                SM.setValue(SM.KEY_NUMBER5, number5);
                SM.setValue(SM.KEY_HELPMESSAGE, message);
                SM.setTimer(timer);
                Toast.makeText(getApplicationContext(), "Your settings has been saved", Toast.LENGTH_LONG).show();
            }
        }
    });

    addMe1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            addLayout(removeable1);
            removeTextView(addMe1);
        }
    });

    addMe2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            addLayout(removeable2);
            removeTextView(addMe2);
        }
    });

    addMe3.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            addLayout(removeable3);
            removeTextView(addMe3);
        }
    });

    addMe4.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            addLayout(removeable4);
            removeTextView(addMe4);
        }
    });

    removeMe1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            removeLayout(removeable1);
            addTextView(addMe1);
            Log.i("NO2",phoneNumber2.getText().toString());
            if(phoneNumber2.getText().toString().length()>0)
                phoneNumber2.setText("");
            SM.removeValue(SM.KEY_NUMBER2);
        }
    });

    removeMe2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            removeLayout(removeable2);
            addTextView(addMe2);
            if(phoneNumber3.getText().toString().length()>0){
                phoneNumber3.setText("");
            }
            SM.removeValue(SM.KEY_NUMBER3);
        }
    });

    removeMe3.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            removeLayout(removeable3);
            addTextView(addMe3);
            if(phoneNumber4.getText().toString().length()>0)
                phoneNumber4.setText("");
            SM.removeValue(SM.KEY_NUMBER4);
        }
    });

    removeMe4.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            removeLayout(removeable4);
            addTextView(addMe4);
            if(phoneNumber5.getText().toString().length()>0)
                phoneNumber5.setText("");
            SM.removeValue(SM.KEY_NUMBER5);
        }
    });


}

public void addLayout(LinearLayout layout){
    layout.setVisibility(View.VISIBLE);
}

public void removeLayout(LinearLayout layout){
    layout.setVisibility(View.GONE);
}

public void removeTextView(TextView tv){
    tv.setVisibility(View.GONE);
}

public void addTextView(TextView tv){
    tv.setVisibility(View.VISIBLE);
}

日志条目:

09-07 15:59:10.866: E/AndroidRuntime(7853): FATAL EXCEPTION: main
09-07 15:59:10.866: E/AndroidRuntime(7853): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.vaw.selfhelp/com.vaw.selfhelp.SMSOptions}: java.lang.NullPointerException
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.app.ActivityThread.access$600(ActivityThread.java:149)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.os.Looper.loop(Looper.java:153)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.app.ActivityThread.main(ActivityThread.java:4987)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at java.lang.reflect.Method.invokeNative(Native Method)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at java.lang.reflect.Method.invoke(Method.java:511)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at dalvik.system.NativeStart.main(Native Method)
09-07 15:59:10.866: E/AndroidRuntime(7853): Caused by: java.lang.NullPointerException
09-07 15:59:10.866: E/AndroidRuntime(7853):     at com.vaw.selfhelp.SMSOptions.onCreate(SMSOptions.java:107)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.app.Activity.performCreate(Activity.java:5020)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
09-07 15:59:10.866: E/AndroidRuntime(7853):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
09-07 15:59:10.866: E/AndroidRuntime(7853):     ... 11 more

第107行:

else{
            phoneNumber2.setText("");// 107
        }

我在日志通话中收到了NPE。为什么会这样?

1 个答案:

答案 0 :(得分:3)

试试这个。你没有给id编辑文本

      <EditText

                android:layout_width="fill_parent"
                 /* android:id="@+id/phoneNumber2" */ set this
               // android:phoneNumber="@+id/phoneNumber2"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/sshlETMarginTop"
                android:hint="Enter Mobile Number"
                android:inputType="number" />