0

2 つの編集テキストに入力された値を取得し、送信ボタンがクリックされたときにそれらを別のクラスにインテントとして送信するインテントを作成しました。コードは次のとおりです。

Button bSubmit1 = (Button) findViewById(R.id.submit2); //Submit Button
    bSubmit1.setOnClickListener(new View.OnClickListener(){

        public void onClick(View v) {
            // TODO Auto-generated method stub

            String entry_Minutes = entryminutes.getText().toString();
            String entry_Hours = entryhours.getText().toString();

            Intent i=new Intent("com.lukeorpin.theappliancekeeper.MOVINGSTRINGS");
            i.putExtra("Entry_Minutes", entry_Minutes);
            i.putExtra("Entry_Hours", entry_Hours);
            startActivity(i);

次に、インテントで送信された文字列が別の 2 つの編集テキストに表示されるはずの場所で、次のクラスのアクティビティが開始されますが、2 つの編集テキスト ボックスには何も表示されません。他のクラスのコードの他の部分は次のとおりです。

public class EntryStatistics extends Activity {

EditText hoursBox, minutesBox;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entrystatistics);

    hoursBox = (EditText)findViewById(R.id.entry_hours);
    minutesBox = (EditText)findViewById(R.id.entry_minutes);

    String entry_minutes = getIntent().getStringExtra("Entry_Minutes");
    if(entry_minutes!=null){
        return;
    }
    String entry_hours = getIntent().getStringExtra("Entry_Hours");
    if(entry_hours!=null){
        return;
    }


    hoursBox.setText(entry_hours);
    minutesBox.setText(entry_minutes);

文字列の値が編集テキストに表示されない理由を誰か教えてもらえますか? 何も表示されません。ありがとう

完全なエラー メッセージは次のとおりです。

04-14 03:00:47.300: E/AndroidRuntime(373): FATAL EXCEPTION: main
04-14 03:00:47.300: E/AndroidRuntime(373): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lukeorpin.theappliancekeeper/com.lukeorpin.theappliancekeeper.EntryStatistics}: java.lang.NullPointerException
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.os.Looper.loop(Looper.java:123)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.main(ActivityThread.java:3683)
04-14 03:00:47.300: E/AndroidRuntime(373):  at java.lang.reflect.Method.invokeNative(Native Method)
04-14 03:00:47.300: E/AndroidRuntime(373):  at java.lang.reflect.Method.invoke(Method.java:507)
04-14 03:00:47.300: E/AndroidRuntime(373):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-14 03:00:47.300: E/AndroidRuntime(373):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-14 03:00:47.300: E/AndroidRuntime(373):  at dalvik.system.NativeStart.main(Native Method)
04-14 03:00:47.300: E/AndroidRuntime(373): Caused by: java.lang.NullPointerException
04-14 03:00:47.300: E/AndroidRuntime(373):  at com.lukeorpin.theappliancekeeper.EntryStatistics.onCreate(EntryStatistics.java:34)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
04-14 03:00:47.300: E/AndroidRuntime(373):  ... 11 more

34 行目と 35 行目は次のとおりです。

hoursBox.setText(entry_hours);
minutesBox.setText(entry_minutes);
4

4 に答える 4

1

nullチェックの単純なタイプミスのようです。現在、文字列が null でない場合は無視していますが、逆にする必要があります。

修正は比較的簡単です。変えるだけ

if(entry_minutes!=null){
    return;
}

if(entry_minutes==null){
    return;
}

両方の文字列に対してこれを行うと、EditTexts は問題なく更新されるはずです。

于 2012-04-14T02:03:53.147 に答える
0
 String entry_minutes = getIntent().getStringExtra("Entry_Minutes");
    if(entry_minutes==null){
        return;
    }
    String entry_hours = getIntent().getStringExtra("Entry_Hours");
    if(entry_hours==null){
        return;
    }

entry_minutes が null ではなく、条件に従って true であるため、現在の行が返されるためです。に変更します。また、最初のアクティビティから、以下のような新しいアクティビティを呼び出しています

Intent i=new Intent("com.lukeorpin.theappliancekeeper.MOVINGSTRINGS");

あなたは EntryStatistics アクティビティのコードを持っていますが、EntryStatistics アクティビティを呼び出したとは思いません。

上記の意図を以下に変更して試してください::

Intent i=new Intent(ThisActivityName.this,EntryStatistics.class);
于 2012-04-14T02:18:08.190 に答える
0

このトリックを使用します:


クラス X:

static String entry_Minutes="",entry_Hours="";
Button bSubmit1 = (Button) findViewById(R.id.submit2); //Submit Button
    bSubmit1.setOnClickListener(new View.OnClickListener(){

        public void onClick(View v) {
            // TODO Auto-generated method stub

            entry_Minutes = entryminutes.getText().toString();
            entry_Hours = entryhours.getText().toString();

            Intent i=new Intent("com.lukeorpin.theappliancekeeper.MOVINGSTRINGS");
            startActivity(i);

EntryStatistics:

public class EntryStatistics extends Activity {

EditText hoursBox, minutesBox;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entrystatistics);

    hoursBox = (EditText)findViewById(R.id.entry_hours);
    minutesBox = (EditText)findViewById(R.id.entry_minutes);

    hoursBox.setText(ClassX.entry_Hours);
    minutesBox.setText(ClassX.entry_Minutes);
于 2012-04-14T02:10:09.943 に答える
0

これは、いくつかのデバッグ ポイントを保持し、F6 キーを使用してステップごとに実行することにより、アプリケーションをデバッグ モードで実行することによって、ステップごとに明確に確認できます。


オブジェクトまたは文字列の送受信

文字列データの送信

インテントを使用して、あるアクティビティから別のアクティビティに転送できることは既にわかっています。

Intent i = new Intent(MainActivity.this,GoActivity.class);

String data = “bla bla”;// Data String to send

i.putExtra("DATA",data );

データの受信

以下に示すように、上記の文字列データを受け取ることができます。

Intent i = getIntent();
String data = i.getStringExtra("DATA");// you well get the String data i.e., BLA BLA

赤色の DATA は、データの送受信中に同じである必要があります。

送信オブジェクト

オブジェクトをあるクラスから別のクラスに送信するコードを次に示します。オブジェクトを送信する際に重要なことの 1 つは、クラスが Serializable クラスを実装する必要があることです。

以下の赤色のテキストは同じはずです。

//MainActivity.java

Intent i = new Intent(MainActivity.this,startActivity.class);

ObjectClassName object = new ObjectClassName();

i.putExtra("THIS", Object);

受信オブジェクト

// startActivity.java

Intent i = getIntent();
ObjectClassName obj = (ObjectClassName) getIntent().getSerializableExtra("THIS");// TypeCasting needed
于 2012-04-14T02:11:49.987 に答える