在我的应用程序中,我有简单的服务和一些BroadcastReceiver
的简单活动,在第一次调用后BroadcastReceiver
秒BroadcastReceiver
不起作用,我无法解决这个问题,
resultRequestBankCard BroadcastReceiver
在调用requestBankCard
我的简化活动
public class ActivityUserRequestBankCard extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
...
private BroadcastReceiver requestBankCard = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
Bundle data = intent.getExtras();
on_currency_list(data.getString("result"));
}
}
};
private BroadcastReceiver resultRequestBankCard = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
Bundle data = intent.getExtras();
on_result_request_cardbank(data.getString("result"));
}
}
};
private void on_currency_list(String result) {
...
}
private void on_result_request_cardbank(String result) {
...
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_request_card_bank);
ButterKnife.bind(this);
showProgressDialog();
startService(
new Intent(
context, WebService.class)
.putExtra("request_type", "requestBankCard")
);
currency_list.setOnItemSelectedListener(this);
}
private void showProgressDialog() {
...
}
@OnClick(R.id.btn_request_bank_card)
public void onResultRequestBankCard(View view) {
showProgressDialog();
int user_id = SP.getInstance().getInt(SP.SharedPrefsTypes.USERID);
startService(
new Intent(
context, WebService.class)
.putExtra("request_type", "resultRequestBankCard")
.putExtra("user_id", user_id)
.putExtra("currency_id", selected_currency)
);
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(requestBankCard, new IntentFilter(WebService.REQUEST_BANK_CARD));
IntentFilter filter = new IntentFilter(WebService.RESULT_REQUEST_BANK_CARD);
registerReceiver(resultRequestBankCard,filter);
}
@Override
protected void onPause() {
super.onPause();
if (progressDialog != null)
progressDialog.dismiss();
try {
unregisterReceiver(requestBankCard);
unregisterReceiver(resultRequestBankCard);
} catch (Exception ignore) {
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (progressDialog != null)
progressDialog.dismiss();
try {
unregisterReceiver(requestBankCard);
unregisterReceiver(resultRequestBankCard);
} catch (Exception ignore) {
}
}
}
我简化的服务:
public class WebService extends Service {
private String fetch_server_url = "";
private Intent send_to_broadcast = null;
public static final String REQUEST_BANK_CARD = "requestBankCard";
public static final String RESULT_REQUEST_BANK_CARD = "resultRequestBankCard";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent != null) {
Bundle data = intent.getExtras();
if (data != null) {
String request_type = data.getString("request_type");
if (request_type != null && request_type.equals("requestBankCard")) {
requestBankCard();
}
if (request_type != null && request_type.equals("resultRequestBankCard")) {
int user_id = data.getInt("user_id");
int currency_id = data.getInt("currency_id");
resultRequestBankCard(user_id, currency_id);
}
}
}
return START_NOT_STICKY;
}
private void resultRequestBankCard(int user_id, int currency_id) {
JsonObject json = new JsonObject();
json.addProperty("user_id", user_id + "");
json.addProperty("currency_id", currency_id + "");
fetch_server_url = "clientResultRequestBankCard";
send_to_broadcast = new Intent(RESULT_REQUEST_BANK_CARD);
Ion.with(getBaseContext())
.load(EpayApplication.getHostAddress() + fetch_server_url)
.setTimeout(SV.DEFAULT_TIMEOUT)
.setJsonObjectBody(json)
.asString()
.setCallback(
new FutureCallback<String>() {
@Override
public void onCompleted(Exception e, String response) {
sendBroadcast(
send_to_broadcast
.putExtra("result", response)
, null
);
}
}
);
}
private void requestBankCard() {
JsonObject json = new JsonObject();
json.addProperty("user_id", "");
fetch_server_url = "clientRequestBankCard";
send_to_broadcast = new Intent(REQUEST_BANK_CARD);
Ion.with(getBaseContext())
.load(EpayApplication.getHostAddress() + fetch_server_url)
.setTimeout(SV.DEFAULT_TIMEOUT)
.setJsonObjectBody(json)
.asString()
.setCallback(
new FutureCallback<String>() {
@Override
public void onCompleted(Exception e, String response) {
sendBroadcast(
send_to_broadcast
.putExtra("result", response)
, null
);
}
}
);
}
}