だから、これが私のシナリオです:私は2つのアクティビティと1つのサービスを持っています-> 3つすべて(クラス)は別のサービスからの戻り型の値を必要とします(したがって、合計2つのアクティビティ、アプリケーションで2つのサービス)。
すなわち:アクティビティA、開始->アクティビティBとサービスI。
アクティビティB、開始->サービスII。
その後、アクティビティA、B、およびサービスIIはサービスIと通信する必要があります。サービスIは常に遅れて実行されており、一度開始すると停止することはありません。
それを行う私のアプローチは次のとおりでした:
4つの通信クラス間のインターフェースを宣言する3つの.aidlファイルを記述します。
アクティビティAを作成してから、サービスI、アクティビティBを作成し、アクティビティBからサービスIIを作成します。
サービスとして、いつでも3つのクラスと通信するためのonBind()メソッドを1つだけ持つことができます。私が行っているのは、setType()プロパティを使用して異なる値を割り当てることにより、3つのクラスからのすべてのインテントを区別することです。
initService()を使用して通信を行う必要がある場合、2つのクラスの間に接続が構築され、その後すぐにreleaseService()を使用して解放されます。
サービスIでは、onBind()メソッドは、最初にgetType()プロパティを使用して、インテントが3つのクラスのどれから来ているかを確認し、それぞれのIBinderタイプを返す必要があります。
ここで、私の問題はステップ5にあります。この場合、onBind()メソッドは、すべてのインテントのgetType()をチェックして、それぞれの戻り型を指定する操作を実行できません。サービスIのonBinder()メソッドのコードは次のとおりです。
@Override
public IBinder onBind(final Intent intent){
Log.d(Main_Service.TAG,"it got connected");
if(intent.getType=="Activity_A")
{
return new Activity_A_aidl.Stub() {
public void function1(int u1,String p1,String p2) throws RemoteException{
//do something
}
};}
if(intent.getType=="Activity_B"){
return new Activity_B_aidl.Stub() {
public int function2() throws RemoteException{//do something
return some_integer_values;
}
};}
if(intent.getType()="Service_II"){
return new Service_II_aidl.Stub(){
public boolean function3(String u,String p) throws RemoteException{
//do something
return boolean_type_variable;
}
};}
}
エラー:LogCatに表示されているように:java.lang.NullPointerException
3つのクラスすべて(アクティビティA、B、サービスII)から-try-catchブロック内の関数の1つを呼び出しているときはいつでも。
誰かが私がどこで間違っているのか教えてもらえますか?
-Kishore Debnath、(3年生、CSE学生)。