0

以下は、アクティビティからサービスにデータを渡そうとしている 2 つのクラスです。問題なく他のアクティビティに渡しましたが、IntentService でエクストラを探すと、常に null が返されます。私が間違ってやっているアイデアはありますか?

public class TestActivity extends Activity {
private Button mbutton;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mbutton = (Button) this.findViewById(R.id.button1);
    mbutton.setOnClickListener(new Button.OnClickListener(){
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
             Log.d("TestActivity", "onClick: starting srvice");
             Intent intent = new Intent(TestActivity.this/*getApplicationContext()*/, MyService.class);
             /*TestActivity.this.getApplicationContext().*/
             intent.putExtra(MyService.PARAM_IN_NAME, ((EditText)findViewById(R.id.editText1)).getText());
             intent.putExtra(MyService.PARAM_IN_JOB, ((EditText)findViewById(R.id.editText2)).getText());
             intent.putExtra(MyService.PARAM_IN_BDAY, ((EditText)findViewById(R.id.editText3)).getText());
             startService(intent);
        }
    });
  }
}

これは、アクティビティからデータを抽出しようとしている Service クラスです。

public class MyService extends IntentService {

public static final String PARAM_IN_NAME = "name";
public static final String PARAM_IN_JOB = "job";
public static final String PARAM_IN_BDAY = "bday";

private String mJob;
private String mBday;
private String mName;

// --------------CONSTRUCTORS--------------
public MyService() {
    super("MyServiceThread");
}

public MyService(String name) {
    super(name);
}

// -------------OVERRIDE-------------
@Override
public IBinder onBind(Intent arg0) {
    return null;
}

@Override
public void onDestroy(){
    Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
}

@Override
protected void onHandleIntent(Intent intent) {
    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();

    mName = intent.getStringExtra(PARAM_IN_NAME);
    mJob = intent.getStringExtra(PARAM_IN_JOB);
    mBday = intent.getStringExtra(PARAM_IN_BDAY);

    String result = "Name = " + mBday + " | Job = " + mJob + " | Bday = " + mBday; 

    Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
}

}

これは、マニフェスト ファイルにもあります。

    <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".TestActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name=".MyService" android:enabled="true" />
4

3 に答える 3

7

データをサービスに送信するには、バンドルを使用します。

活動から。

Bundle bundle = new Bundle();  
bundle.putCharSequence("extraData", data);
myIntent.putExtras(bundle);

サービスを受けます。

Bundle bundle = intent.getExtras(); data = (String) bundle.getCharSequence("extraData");

于 2012-07-30T05:10:32.807 に答える
1

コードは正常に表示されています。

次のようなtoString()テキストを取得したら、追加してみてください。EditText

intent.putExtra(MyService.PARAM_IN_NAME, ((EditText)findViewById(R.id.editText1)).getText().toString());

于 2012-07-30T05:25:34.607 に答える
0

このようにデータを受信側に渡します

  Bundle bundle = this.getIntent().getExtras();
    String scan = bundle.getString("scan");
    ((TextView)findViewById(R.id.username)).setText(scan);
于 2012-07-30T05:10:22.840 に答える