gpt4 book ai didi

android - 如何将 Activity 中复选框的值传递给服务?

转载 作者:行者123 更新时间:2023-11-29 22:24:11 26 4
gpt4 key购买 nike

我的主要 Activity 中有三个复选框。当按下“提交”按钮时,我希望能够将是否选中这些复选框传递给服务。这是我的代码:

public void onClick(View v) {
// TODO Auto-generated method stub
Intent start_service = new Intent();
start_service.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
start_service.setClass(getApplicationContext(), FollowService.class);

if( box1.isChecked() ){
boxes[0] = 1;
}
if( box2.isChecked() ){
boxes[1] = 1;
}
if( box3.isChecked() ){
boxes[2] = 1;
}

start_service.putExtra("com.mypackage.boxes", selections);
box1.setChecked(false);
box2.setChecked(false);
box3.setChecked(false);
getApplicationContext().startService(start_service);
}

然后我尝试通过执行以下操作来访问我试图传递给 onStartCommand 内部服务的这个数组:

public int onStartCommand(Intent intent, int flags, int startID){
try {
Bundle selections = intent.getExtras();
int [] boxes = selections.getIntArray("boxes");

if( boxes[0] == 1 ){
// do something
}
if( boxes[1] == 1 ){
// do something
}
if( boxes[1] == 1 ){ // do something
}

checkWebsite();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return START_STICKY;
}

当我按下“提交”按钮时,我的应用程序将启动并且不会强制关闭,但我在 LogCat 中收到一条 system.err 消息。

这是我在尝试启动服务时收到的 LogCat 错误消息。

06-19 04:20:51.514: WARN/System.err(300): java.lang.NullPointerException
06-19 04:20:51.536: WARN/System.err(300): at com.mypackage.FollowService.onStartCommand(FollowService.java:60)
06-19 04:20:51.536: WARN/System.err(300): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3053)
06-19 04:20:51.544: WARN/System.err(300): at android.app.ActivityThread.access$3600(ActivityThread.java:125)
06-19 04:20:51.544: WARN/System.err(300): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2096)
06-19 04:20:51.554: WARN/System.err(300): at android.os.Handler.dispatchMessage(Handler.java:99)
06-19 04:20:51.554: WARN/System.err(300): at android.os.Looper.loop(Looper.java:123)
06-19 04:20:51.554: WARN/System.err(300): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-19 04:20:51.574: WARN/System.err(300): at java.lang.reflect.Method.invokeNative(Native Method)
06-19 04:20:51.574: WARN/System.err(300): at java.lang.reflect.Method.invoke(Method.java:521)
06-19 04:20:51.574: WARN/System.err(300): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-19 04:20:51.574: WARN/System.err(300): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-19 04:20:51.584: WARN/System.err(300): at dalvik.system.NativeStart.main(Native Method)

最佳答案

按照以下步骤

1) 先做一个class文件名.java,然后写下面的代码

package com.example.bundle;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

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

Intent intent = new Intent(this, second.class);
int[] arr = new int[3];
arr[0]=0;
arr[1]=1;
arr[2]=2;
Bundle bundle = new Bundle();
bundle.putIntArray("arr", arr);
intent.putExtras(bundle);
startService(intent);
}
}

2) 将服务名称命名为second.java 并放在代码下方

package com.example.bundle;

import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.Toast;

public class second extends Service {

@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Bundle bundle = intent.getExtras();
int[] arr = bundle.getIntArray("arr");
Toast.makeText(second.this, "" + arr[0] + " " + arr[1] + " " + arr[2], Toast.LENGTH_LONG).show();
return super.onStartCommand(intent, flags, startId);
}
}

3) 像这样表现

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bundle"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".first" 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=".second" android:label="@string/app_name">

</service>
</application>


</manifest>

关于android - 如何将 Activity 中复选框的值传递给服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6400479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com