资源未找到异常。

6

我在调用一个映射到EditText对象的类方法的代码行时,遇到了“资源未找到异常”。我不明白为什么会出现这个问题。

我有一个简单的Java类,名为store.java,它只是将来自下拉列表和EditText的数据映射起来,还有一个名为SpinPizza.java的类,用于打印它们的值。

Store.java

package com.Lak;

import android.os.Parcel;
import android.os.Parcelable;

public class store implements Parcelable {

    @SuppressWarnings("rawtypes")
    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public store createFromParcel(Parcel in) {
            return new store(in);
        }

        public store[] newArray(int size) {
            return new store[size];
        }
    };
    private static final long serialVersionUID = 1L;
    private String pizzaname;
    private String pizzasize;
    private int n;

    public store() {
    }

    public store(Parcel source) {
          /*
           * Reconstruct from the Parcel
           */
        n = source.readInt();
        pizzaname = source.readString();
        pizzasize = source.readString();
    }

    public void setOrder(String name, String size, int qty) {
        pizzaname = name;
        pizzasize = size;
        n = qty;
    }

    public String getPizzaName() {
        return pizzaname;
    }

    public int getQuantity() {
        return n;
    }

    public String getPizzaSize() {
        return pizzasize;
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {

        dest.writeInt(n);
        dest.writeString(pizzaname);
        dest.writeString(pizzasize);
    }

    /** Called when the activity is first created. */
}

SpinPizza.java

package com.Lak;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class SpinPizza extends Activity {

    private static final long serialVersionUID = 1L;
    store B[] = new store[10];
    int n, i, num;
    Spinner s = null, s1 = null;
    EditText edittext = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.drop);

        s = (Spinner) findViewById(R.id.spinner);

        ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(this, R.array.pizzaarray, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s.setAdapter(adapter);

        s1 = (Spinner) findViewById(R.id.spinner1);
        ArrayAdapter<?> adapter1 = ArrayAdapter.createFromResource(this, R.array.sizearray, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s1.setAdapter(adapter1);

        edittext = (EditText) findViewById(R.id.edittext);
        i = 0;
        edittext.setOnKeyListener(new OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // If the event is a key-down event on the "enter" button
                if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
                        (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER)) {
                    // Perform action on key press

                    B[i] = new store();
                    //n=Integer.parseInt(edittext.getText().toString());

                    // num = Float.valueOf(edittext.getText().toString());

                    try {
                        num = Integer.parseInt(edittext.getText().toString());
                    } catch (NumberFormatException nfe) {
                        System.out.println("Could not parse " + nfe);
                    }

                    B[i].setOrder(s.getSelectedItem().toString(), s1.getSelectedItem().toString(), num);

                    TextView objText = (TextView) findViewById(R.id.pl);
                    TextView objText1 = (TextView) findViewById(R.id.pl2);
                    TextView objText2 = (TextView) findViewById(R.id.pl3);

                    objText.setText(B[i].getPizzaName());
                    objText1.setText(B[i].getPizzaSize());
                    objText2.setText(B[i].getQuantity());  //**RESOURCE NOT FOUND EXCEPTION**
                    i++;

                    Toast.makeText(SpinPizza.this, edittext.getText(), Toast.LENGTH_SHORT).show();

                    return true;
                }
                return false;
            }
        });

        Button next1 = (Button) findViewById(R.id.bill);

        next1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent myIntent = new Intent(view.getContext(), Bill.class);
                // store B= new store();
                myIntent.putExtra("myclass", B);
                myIntent.putExtra("len", i);
                int j;

                for (j = 0; j < i; j++)
                //{myIntent.putExtra("my",s.getSelectedItem().toString());
                // myIntent.putExtra("my1",s1.getSelectedItem().toString());
                // }
                {
                    myIntent.putExtra("my", B[j].getPizzaName());
                    myIntent.putExtra("my1", B[j].getPizzaSize());
                    myIntent.putExtra("my2", B[j].getQuantity());
                }

                startActivityForResult(myIntent, 0);
            }
        });
    }
}

4
这是很多代码,请您编辑一下,只保留相关部分,并指出哪一行导致了错误。 - user212218
你在XML文件中恰当地定义了editText吗? - asenovm
@Phoenix-> 我知道这是相当多的代码...我已经标出了我遇到异常的那一行,请您查看并忽略后面的代码...您也可以忽略第一个类,因为我认为那里没有问题...只需查看 SpinPizza.java 即可...对于代码过长,我感到抱歉... - Lakshay Gupta
@iLate:嗯,我觉得这个没问题...这是XML代码:<EditText android:id="@+id/edittext" android:layout_width="fill_parent" android:hint="@string/numberHint" android:layout_height="wrap_content" android:numeric="decimal"/> - Lakshay Gupta
1个回答

19

数量是一个整数:

public int getQuantity()

所以你应该使用这个:

objText2.setText(String.valueOf(B[i].getQuantity()));
否则,操作系统会尝试查找该整数的资源,但没有找到。
详细解释:EditText.setText()方法有两个重载版本,一个针对字符串(setText(CharSequence text)),另一个针对字符串资源ID(setText(int resid))。

@Arhimed->非常感谢..它起作用了..:-) 但我还有一个问题...我无法将B[i]发送到另一个活动。 我正在使用Parcelable,并且我正在遵循正确的语法...但是当我尝试访问B[i]的元素时,它会显示Null Pointer异常...我有一种感觉,即B[i].setOrder(s.getSelectedItem().toString(),s1.getSelectedItem().toString(),num); 这一行不对...我认为Edittext还有另一个问题,因为值无法正确存储,所以我无法通过B[i]在其他活动中访问它...如果您也能解决这个问题,我将不胜感激... - Lakshay Gupta
2
@user677124:你有点搞糊涂了,是吧? :) 请接受这个答案作为“我遇到了资源未找到异常”的解决方案,并提出另一个关于将Parcelable传递给另一个Activity的问题。 - Vit Khudenko
在我看来,似乎违反了最少惊讶原则。 - mjj1409

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接