1

初めてのアプリを書き始めたところです。
コンテンツ (テキスト) を取得したい EditText フィールドがあります...
いくつかのフィールドを持つ新しいクラスを作成しました。そのうちの 1 つは EditText フィールドのコンテンツのターゲットです。
ローカル文字列変数を作成して次のように書き込む場合:( name がローカル変数の場合)
name=(order_name.getText().toString());
すべてがうまく機能します。
しかし、パブリック文字列フィールドを含む作成したクラスを使用しようとすると:
order.setName(order_name.getText().toString());
私はFCを取得します。
また、値からフィールドへの直接挿入を試みましたが、それがクラッシュしたときに、示されているように set 関数を使用してみました。
クラスは最初にEclipseの新しいクラスウィザードを使用して作成され、その後AndroidManifest.xmlウィザードを使用して再作成されました。

ログ:

06-01 17:06:42.104: E/AndroidRuntime(1190): FATAL EXCEPTION: main<br>
06-01 17:06:42.104: E/AndroidRuntime(1190): java.lang.NullPointerException<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at com.Sagi.MyOrders.new_order_activity$1.onClick(new_order_activity.java:46)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at android.view.View.performClick(View.java:2408)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at android.view.View$PerformClick.run(View.java:8816)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at android.os.Handler.handleCallback(Handler.java:587)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at android.os.Handler.dispatchMessage(Handler.java:92)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at android.os.Looper.loop(Looper.java:123)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at android.app.ActivityThread.main(ActivityThread.java:4627)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at java.lang.reflect.Method.invokeNative(Native Method)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at java.lang.reflect.Method.invoke(Method.java:521)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)<br>
06-01 17:06:42.104: E/AndroidRuntime(1190):     at dalvik.system.NativeStart.main(Native Method)

みんなありがとう !

コード :

 public class new_order_activity extends Activity {
    DatabaseHelper DBHelper;
    // LAYOUT VARS
    Button saveButton,clearButton;
    EditText order_name,link,price;
    CheckBox paid,alert;
    DatePicker date;
    // LOCAL VARS
    Order order;
    String name1;



/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_order_layout);
    date = (DatePicker)findViewById(R.id.order_date_field);
    alert = (CheckBox)findViewById(R.id.alert_checkbox);
    paid = (CheckBox)findViewById(R.id.paid_checkbox);
    price = (EditText)findViewById(R.id.price_field);
    order_name = (EditText)findViewById(R.id.order_name_field);
    link = (EditText)findViewById(R.id.link_field);

    saveButton = (Button) findViewById(R.id.save_button);
    clearButton = (Button) findViewById(R.id.clear_button);
    DBHelper=new DatabaseHelper(this);

    saveButton.setOnClickListener(  
        new View.OnClickListener() {
            public void onClick(View view) {
Line46:             **order.setName(order_name.getText().toString());**
                order.link=link.getText().toString();
                order.price=price.getText().toString();
                order.paid=paid.isChecked();
                order.alert=alert.isChecked();
                order.year=date.getYear();
                order.month=date.getMonth();
                order.day=date.getDayOfMonth();
                submitOrder(order);
            }
        });
4

2 に答える 2

1

変数で実行しようとするとsetNameorderまだインスタンス化されていないため、メソッドを呼び出す実際のオブジェクトがないため、例外がスローされます。orderアクティビティで作成されるように、 onCreate メソッドでインスタンス化する必要があります(任意の方法でコンストラクターを呼び出します)(クリックするたびに新しいオブジェクトを作成したい場合を除きます-次に、 onClickListener 関数でインスタンス化します、ただし、その名前を設定する前に確認してください)。

于 2012-06-01T17:45:39.697 に答える
1

orderはnullなので、NPEが返されます...最初に初期化する必要があります

Order order = new Order();//initialize your class using new as per Order Constructor...
order.setName(order_name.getText().toString());
于 2012-06-01T17:50:32.597 に答える