Как передать значение из MainActivity в ServiceConnection? - PullRequest
0 голосов
/ 10 июня 2019

У меня есть MainActivity с private String attribute.В моем коде у меня есть следующее:

private ServiceConnection mTransactionServiceConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
        mTransactionService = IPoyntTransactionService.Stub.asInterface(iBinder);
        Log.d(TAG, "Transaction service connected");
        try {
            mTransactionService.getTransaction("fcf98959-c188-42d1-b085-786d21e552ac", UUID.randomUUID().toString(), mTransactionServiceListener);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    public void onServiceDisconnected(ComponentName componentName) {
        mTransactionService = null;
        Log.d(TAG, "Transaction service disconnected");
    }
};

Значение: fcf98959-c188-42d1-b085-786d21e552ac жестко закодировано.Мне нужно положить строку, которая у меня есть в атрибутах в MainActivity.Как я могу это сделать?

Я пытался сделать строку общедоступной, статичной, но не работает.

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Вопрос не очень понятен. Однако, насколько я понимаю, вы можете рассмотреть возможность использования в вашем MainActivity переменной public static, которую можно использовать в любом месте вашего кода.

Следовательно, определите переменную attribute, как показано в вашем MainActivity.

public static String attribute = "fcf98959-c188-42d1-b085-786d21e552ac";

Теперь используйте это в ServiceConnection следующим образом.

mTransactionService.getTransaction(MainActivity.attribute, UUID.randomUUID().toString(), mTransactionServiceListener);
0 голосов
/ 10 июня 2019

Создайте функцию в вашем сервисе, которая будет работать как сеттер, например:

public void setValue(String value){
   this.value = value;
}

Внутри вашей функции onServiceConnected ()

и вызывайте его из onServiceConnected () после запуска службы, вы можете использовать функции, которые внутри нее.

private ServiceConnection mTransactionServiceConnection = new ServiceConnection() {
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
        mTransactionService = IPoyntTransactionService.Stub.asInterface(iBinder);
        Log.d(TAG, "Transaction service connected");
         **mTransactionService.setValue(the value your want to set);**
        try {
            mTransactionService.getTransaction("fcf98959-c188-42d1-b085-786d21e552ac", UUID.randomUUID().toString(), mTransactionServiceListener);
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
    public void onServiceDisconnected(ComponentName componentName) {
        mTransactionService = null;
        Log.d(TAG, "Transaction service disconnected");
    }
};

это обновит значение в сервисе. Вы также можете использовать сервисные функции из onServiceConnected, просто убедитесь, что оно не равно нулю.

...