使用Spinner / String数组的OnCreate-Method之后的NullpointerException

时间:2014-10-16 12:04:10

标签: android

在我的主要活动调用以下活动后,我的应用程序崩溃并出现一个nullpointer异常(在LogCat中看到)。 在调试和监视我的变量之后,我无法确定问题所在。

public class MyClass extends Activity {
private Spinner pay_spend;
private Spinner pay;
private Spinner person;
private EditText edit_pay;
private boolean initCall;

private OnItemSelectedListener itemSelected;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_einbezahlen);

    pay_spend = (Spinner) findViewById(R.id.spinner_bezahlen_spende);
    pay = (Spinner) findViewById(R.id.spinner_bezahlen);
    person = (Spinner) findViewById(R.id.spinner_person);
    edit_pay = (EditText) findViewById(R.id.id_field_einzahlen);
    pay.setVisibility(View.INVISIBLE);
    edit_pay.setVisibility(View.INVISIBLE);

    this.initOnItemSelectedListener();
    pay_spend.setOnItemSelectedListener(itemSelected);
}

private void initOnItemSelectedListener() {
    itemSelected = new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {
            if(initCall) {
                initCall = false;
            } else {
                if(position == 0) {
                    edit_pay.setVisibility(View.INVISIBLE);
                    pay.setVisibility(View.VISIBLE);
                } else {
                    pay.setVisibility(View.INVISIBLE);
                    edit_pay.setVisibility(View.VISIBLE);
                }               
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            pay.setVisibility(View.INVISIBLE);
            edit_pay.setVisibility(View.INVISIBLE);
        }
    };
}

在每个断点处设置并更正我的变量,设置了具有旋转器条目的字符串数组并且具有正确的值(对于int数组相同)

活动的XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="8dp"
android:paddingRight="8dp" >

<Spinner
    android:id="@+id/spinner_bezahlen_spende"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/spinner_person"
    android:layout_below="@+id/spinner_person"
    android:entries="@array/bezSpende"
    tools:listitem="@android:layout/simple_spinner_dropdown_item" />

<Spinner
    android:id="@+id/spinner_person"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="21dp"
    android:entries="@array/personen"
    tools:listitem="@android:layout/simple_spinner_dropdown_item" />

<Spinner
    android:id="@+id/spinner_bezahlen"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/spinner_bezahlen_spende"
    android:layout_below="@+id/spinner_bezahlen_spende"
    android:entries="@array/kosten"
    tools:listitem="@android:layout/simple_spinner_dropdown_item" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="17dp"
    android:text="@string/txt_einzahlen_text" />

<TextView
    android:id="@+id/text_rueckmeldung"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/btn_einzahlen"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="16dp"
    android:text="@string/txt_rueckmeldung"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<Button
    android:id="@+id/btn_einzahlen"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/id_field_einzahlen"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="18dp"
    android:onClick="onButtonClick"
    android:text="@string/txt_btn_einzahlen" />

<EditText
    android:id="@+id/id_field_einzahlen"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/spinner_bezahlen"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="22dp"
    android:ems="10"
    android:inputType="number"
    android:labelFor="@+id/id_field_einzahlen"
    android:text="@string/txt_betrag_eingeben" />

</RelativeLayout>

我刚开始用Android SDK编程,这就是为什么几乎所有的XML代码都是用eclipse提供的图形工具生成的

logcat的:

10-16 06:31:03.936: E/AndroidRuntime(5704): FATAL EXCEPTION: main
10-16 06:31:03.936: E/AndroidRuntime(5704): Process: de.storno.wortspielkasse, PID:5704
10-16 06:31:03.936: E/AndroidRuntime(5704): java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:197)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.widget.Spinner.onMeasure(Spinner.java:505)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.View.measure(View.java:16987)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:722)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:458)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.View.measure(View.java:16987)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5257)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.View.measure(View.java:16987)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5257)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:447)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.View.measure(View.java:16987)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5257)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:314)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2429)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.View.measure(View.java:16987)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1986)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1157)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1368)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1044)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5749)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.Choreographer.doCallbacks(Choreographer.java:580)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.Choreographer.doFrame(Choreographer.java:550)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.os.Handler.handleCallback(Handler.java:738)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.os.Handler.dispatchMessage(Handler.java:95)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.os.Looper.loop(Looper.java:135)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at android.app.ActivityThread.main(ActivityThread.java:5070)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at java.lang.reflect.Method.invoke(Native Method)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at java.lang.reflect.Method.invoke(Method.java:372)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
10-16 06:31:03.936: E/AndroidRuntime(5704):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:631)

当ZygoteInit $ Method ...被称为“未找到来源”的错误时。显示

我现在在网上搜索了将近4小时,并没有找到解决问题的方法。 希望你能给我任何建议或提示,以摆脱这个问题

提前致谢


编辑: 我刚刚发现我在int数组中遇到了一些问题。它未正确初始化(所有值均为空),但具有适当数量的条目。

<integer-array name="kosten">
    <item >10</item>
    <item >20</item>
    <item >30</item>
    <item >40</item>
    <item >50</item>
    <item >60</item>
    <item >70</item>
    <item >80</item>
    <item >90</item>
    <item >100</item>
</integer-array>

我正在寻找解决方案

2 个答案:

答案 0 :(得分:0)

尝试在onCreate()方法上实现itemSelect OnItemSelectedListener,之前我遇到过这个问题。

答案 1 :(得分:0)

对于微调器entries,请使用string-array代替integer-array