0

私は最初のAndroidアプリの作成に取り組んでいます。SendMessageと呼ばれる別のアクティビティから呼び出されるアクティビティを開始しようとしていAskReportます。SOでこのような同様の質問を見たことがありますが、私の問題に一致するものは見つかりませんでした。

アクティビティのコードAskReportは次のとおりです。

public class AskReport extends Activity
{
    Button done;
    RadioButton checkedRadioButton;
    RadioGroup group;
    EditText email, info;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ask_report);
        done = (Button) findViewById(R.id.Report);
        group = (RadioGroup) findViewById(R.id.radioGroup1);
        checkedRadioButton = (RadioButton) findViewById(group.getCheckedRadioButtonId());
        info = (EditText) findViewById(R.id.Info);
        email = (EditText) findViewById(R.id.Email);
        }

    public void reportClick(View view){
        Intent intent = new Intent(this, SendMessage.class);
/* Line1 */ intent.putExtra("sender_email", email.getText());      
/* Line2 */ intent.putExtra("additional_info", info.getText());    
/* Line3 */ intent.putExtra("checked_button",checkedRadioButton.getText()); 
        startActivity(intent);
    }
}

アクティビティのコードSendMessageは次のとおりです。

    public class SendMessage extends Activity
    {
    String message = "";
    EditText message_to_send;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.send_message);
        message_to_send = (EditText) findViewById(R.id.message_to_send);
        Intent intent = getIntent();
        message += intent.getStringExtra("sender_email");
        message += intent.getStringExtra("additional_info");
        message += intent.getStringExtra("checked_button");
        message_to_send.setText(message);
        }
}   

AskReportアクティビティでマークされた3行をコメントアウトすると、SendMessage表示されるテキストはnullnullnull(理解可能)ですが、アクティビティは正常に呼び出されます。

マニフェストでアクティビティエントリを正しくマークしました。

さらに、ここに表示されるlogcatメッセージも示します。

09-10 15:12:57.555: E/AndroidRuntime(1311): FATAL EXCEPTION: main
09-10 15:12:57.555: E/AndroidRuntime(1311): java.lang.IllegalStateException: Could not execute method of the activity
09-10 15:12:57.555: E/AndroidRuntime(1311):     at android.view.View$1.onClick(View.java:3591)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at android.view.View.performClick(View.java:4084)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at android.view.View$PerformClick.run(View.java:16966)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at android.os.Handler.handleCallback(Handler.java:615)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at android.os.Looper.loop(Looper.java:137)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at android.app.ActivityThread.main(ActivityThread.java:4745)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at java.lang.reflect.Method.invokeNative(Native Method)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at java.lang.reflect.Method.invoke(Method.java:511)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at dalvik.system.NativeStart.main(Native Method)
09-10 15:12:57.555: E/AndroidRuntime(1311): Caused by: java.lang.reflect.InvocationTargetException
09-10 15:12:57.555: E/AndroidRuntime(1311):     at java.lang.reflect.Method.invokeNative(Native Method)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at java.lang.reflect.Method.invoke(Method.java:511)
09-10 15:12:57.555: E/AndroidRuntime(1311):     at android.view.View$1.onClick(View.java:3586)
09-10 15:12:57.555: E/AndroidRuntime(1311):     ... 11 more
09-10 15:12:57.555: E/AndroidRuntime(1311): Caused by: java.lang.NullPointerException
09-10 15:12:57.555: E/AndroidRuntime(1311):     at com.example.safeworld.AskReport.reportClick(AskReport.java:44)
09-10 15:12:57.555: E/AndroidRuntime(1311):     ... 14 more
09-10 15:13:00.725: I/Process(1311): Sending signal. PID: 1311 SIG: 9

android:onClick="XXXXXX"また、対応するlayout.xmlに関数を配置しました。

これらの3行で何が問題になっているのかを理解するのを手伝ってください。助けてくれてありがとう!

編集:

これが私のask_report.xml

<?xml version="1.0" encoding="UTF-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/TableLayout2"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/ask"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ask_report"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textSize="24dp" />

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/road_accident"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:text="@string/road_accident" />

        <RadioButton
            android:id="@+id/fire"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:text="@string/fire" />

        <RadioButton
            android:id="@+id/theft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:text="@string/theft" />

        <RadioButton
            android:id="@+id/other"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:layout_marginBottom="12dp"
            android:text="@string/other" />

    </RadioGroup>

    <TextView
        android:id="@+id/AddInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add_detail" />

    <EditText
        android:id="@+id/Info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="text" >
    </EditText>

    <TextView
        android:id="@+id/AskEmail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/enter_email"
        android:layout_marginTop="10dp" />

    <EditText
        android:id="@+id/Email"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textEmailAddress" />

    <Button
        android:id="@+id/Report"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/done"
        android:onClick="reportClick" />

</TableLayout>
4

4 に答える 4

1

スタックトレースから判断すると、これらの行の1つが戻ってきていると言えますnull

checkedRadioButton = (RadioButton) findViewById(group.getCheckedRadioButtonId());
info = (EditText) findViewById(R.id.Info);
email = (EditText) findViewById(R.id.Email);

3つのビューすべての値を出力し、そのうちの1つがnullの場合は、IDが正しく、レイアウトに含まれていることを確認しますask_report

于 2012-09-10T10:17:45.687 に答える
1

それはおそらくあなたがからテキストを取得しているためですEditTextちょうど以下のようにしてください-

intent.putExtra("sender_email", email.getText().toString());
intent.putExtra("additional_info", info.getText().toString());
intent.putExtra("checked_button",checkedRadioButton.getText().toString());

.toString()からテキストを取得するために使用するのを忘れましたEditText

アップデート

さて、あなたのメソッドradioButtonRadioGroup内部からテキストを取得するには、このようにするとよいでしょう-ButtononClick

// Gets a reference to our radio group
// rBtnDigits is the name of our radio group (code not shown)
RadioGroup g = (RadioGroup) findViewById(R.id.radioGroup1); 

// Returns an integer which represents the selected radio button's ID
int selected = g.getCheckedRadioButtonId();

// Gets a reference to our "selected" radio button
RadioButton b = (RadioButton) findViewById(selected);

intent.putExtra("sender_email", email.getText().toString());
intent.putExtra("additional_info", info.getText().toString());

// Now you can get the text or whatever you want from the "selected" radio button
intent.putExtra("checked_button",b.getText());
于 2012-09-10T10:39:47.050 に答える
0

Androidは、ユーザーが定義するときにOnClickListenerを実装するだけです。

android:onClick="someMethod"
于 2012-09-10T10:21:26.763 に答える
0

さて、私はこれに自分で答えて、これを読むすべての人に答えを知らせようと思いました。

マークされた3つの線の問題は、に値Line3があったものであるためにありました。nullcheckedRadioButton

うまくいったのは:

  • デフォルトでを選択するandroid:checkedButton="@+id/road_accident"ために自分に追加しました。RadioGroupRoadAccident
  • 次に、にを追加しonCheckedChangedListenerましRadioGroupcheckedRadioButton

コードは次のようになります。

group = (RadioGroup) findViewById(R.id.radioGroup1);
        group.setOnCheckedChangeListener(new OnCheckedChangeListener(){

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                // TODO Auto-generated method stub
                checkedRadioButton = (RadioButton) group.findViewById(checkedId);
            }
        });

        checkedRadioButton = (RadioButton) group.findViewById(group.getCheckedRadioButtonId());

これで、Line3は完全に正常に機能します。

クレジット: @marmorと@SpKにご協力いただきありがとうございます。申し訳ありませんが、私があなたの両方から半分を取ったので、あなたの答えの1つを正しいものとして選択することができませんでした。

于 2012-09-10T19:41:08.940 に答える