2011-06-19 8 views
1

私の主な活動は3つのチェックボックスがあります。私は、 "submit"ボタンが押されたときに、これらのチェックボックスがサービスにチェックされているかどうかを渡すことができるようにしたい。ここに私のコードは次のとおりです。アクティビティのチェックボックスの値をサービスに渡すにはどうすればよいですか?

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) 
+0

logcatエラーを通知してください。 – sgarman

答えて

2

は、以下に従う

1)は、クラスファイル名first.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> 
+0

まだNULLポインタ例外が発生しています。私は何か本当にばかなことをしていると思っていますが、もちろん私はそれが何であるか分かりません。 – ihtkwot

+0

私はあなたの問題の小さな例を入れました。 – Dharmendra

+0

Dr. Jackalありがとうございます。私はついにあなたの例を試すことができました。 – ihtkwot

0

selections.getIntArray("com.mypackage.boxes") 

私が間違っていることが、あなたのパッケージ名を追加することは必要条件ではなく、フォローするだけで良いの標準であるかもしれません。

+0

コードを変更しても、同じLogCatエラーが発生します。理由は、私が意図を正しく渡していないか、正しくまたは両方にアクセスしていないという理由が考えられます。 – ihtkwot

+0

マニフェストファイルでサービスを定義しましたか? – sgarman

+0

サービスが定義されており、この機能を追加しようとするまで機能していました。私はSharedPreferencesへの切り替えを検討しています。なぜなら、配列を渡す方法を理解できないからです。 – ihtkwot

関連する問題