0

アクティビティAからBに文字列を渡してから、AのアクティビティBからデータを取得します。そのため、startActivityForResult()を使用しました。常に「ISnotNull」を取得します。データを受信して​​いますが、AcitivityBのテキストビューでそのデータを表示できません。コードを投稿しています。何が問題なのか教えてください。

アクティビティA(SendData):

Intent data= new Intent(SendData.this, RecieveData.class);
Bundle check = new Bundle();

check.putString("UmerData", cheese);
medt.setText(cheese);
data.putExtras(check);
startActivityForResult(data, 5);

アクティビティB(ReceiveData):

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.recievedata);
    InitializeFoo();
    if(getIntent()!=null)
    {
        rt1.setText("Is not Null");
                    //Bundle got = getIntent().getExtras();

        //rt1.setText(got.getString("UmerData"));
    }
}

PS:アクティビティBに変更を加えて、文字列を取得しているかどうかを確認しました。それでも「IsnotNull」と表示されています。これは、文字列を取得していないことを意味します。しかし、なぜこれが表示されないのかわかりません。コードは次のとおりです。

Bundle got = getIntent().getExtras();
String ss= got.getString("UmerData");
if(getIntent()!=null && ss==null )
{
    //Bundle got = getIntent().getExtras();
    //rt1.setText(got.getString("UmerData"));
    rt1.setText("Is not Null");
}

これはアクティビティBにあります。

private void InitializeFoo() {
    // TODO Auto-generated method stub
    Rg = (RadioGroup) findViewById(R.id.RG);
    rt1 = (TextView) findViewById(R.id.Rt1);
    rt2 = (TextView) findViewById(R.id.Rt2);
    rec = (Button) findViewById(R.id.Return);
    Rg.setOnCheckedChangeListener(this);
    rec.setOnClickListener(this);
}

ありがとう

4

2 に答える 2

0

putExtras(Bundle) を使用してエクストラを追加する場合は、値のペアのキーにパッケージ名を含める必要があります。ドキュメントを参照してください:

「一連の拡張データをインテントに追加します。キーにはパッケージ プレフィックスを含める必要があります。たとえば、アプリ com.android.contacts は「com.android.contacts.ShowAll」のような名前を使用します。

いつも使えます

data.putExtra("UmerData", cheese);
于 2012-08-13T22:47:44.773 に答える
0

そのため、2 つの主なエラーがありました。1 つ目は、SendData で、RecieveData を呼び出す直前に、インテントに設定していたチーズの値が null だったことです。これが、2 番目のアクティビティで null を受け取っていた主な理由です。次のコードは、これらのケースに対応する必要があるため、「if」ブラケットから外します。

cheese = Dt.getText().toString();

もう 1 つのこと (実際には、そこに配置したコードでは問題ありません) は、バンドルから作成されたバンドルとしてではなく、(putExtra(....) を呼び出すことによって) バンドルの「チェック」をエクストラ自体として設定していたことです。キーと値のペア (putExtras(...) の呼び出しによる)。

テストされ、両方の場所で正しい値を受け取りました。明確にするために、問題のあるアクティビティを添付します。

package com.umer.practice2;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class SendData extends Activity implements View.OnClickListener {

    EditText Dt;
    Button Dbut, result;
    TextView medt;
    String cheese;

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

    setContentView(R.layout.data);

    InitializeShit();
    }

    private void InitializeShit() {
    // TODO Auto-generated method stub

    Dt = (EditText) findViewById(R.id.Det);
    Dbut = (Button) findViewById(R.id.Sna);
    result = (Button) findViewById(R.id.Sfr);
    medt = (TextView) findViewById(R.id.Med);

    Dbut.setOnClickListener(this);
    result.setOnClickListener(this);

    }

    @Override
    public void onClick(View arg0) {
    // TODO Auto-generated method stub
    cheese = Dt.getText().toString();
    switch (arg0.getId()) {
        case R.id.Sna:

        Bundle send = new Bundle();

        send.putString("UmerData", cheese);
        Intent foo = new Intent(SendData.this, RecieveData.class);

        foo.putExtras(send);

        startActivity(foo);
        break;

        case R.id.Sfr:
        Intent data = new Intent(SendData.this, RecieveData.class);
        Bundle check = new Bundle(); // NOT IN TRAVIS CODE

        check.putString("UmerData", cheese);// NOT IN TRAVIS CODE
        medt.setText(cheese);// NOT IN TRAVIS CODE
        data.putExtras(check);// NOT IN TRAVIS CODE
        startActivityForResult(data, 5);
        break;
    }

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub

    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {
        Bundle roti = new Bundle();
        roti = data.getExtras();
        String ch = roti.getString("String");
        medt.setText(ch);
    }
    }
}

それが役に立ったことを願っています。

于 2012-08-15T23:18:55.263 に答える