Java 每30秒更新一次订单状态
我正在轨道订单屏幕上工作。用户下订单后,管理员将订单状态从待定更改为已接受。我想在轨道订单屏幕上实时显示订单状态。无论何时在后端更改admin,状态都应该更改 这是单击“轨迹顺序”按钮的初始屏幕 当用户选择下拉列表时,将显示基于用户的所有订单 这是选择特定顺序后的轨迹顺序屏幕 . 根据图片,一旦在后端将其更改为out for delivery,我想实时指向该栏以订购out for delivery 这是我的跟踪订单活动Java 每30秒更新一次订单状态,java,android,Java,Android,我正在轨道订单屏幕上工作。用户下订单后,管理员将订单状态从待定更改为已接受。我想在轨道订单屏幕上实时显示订单状态。无论何时在后端更改admin,状态都应该更改 这是单击“轨迹顺序”按钮的初始屏幕 当用户选择下拉列表时,将显示基于用户的所有订单 这是选择特定顺序后的轨迹顺序屏幕 . 根据图片,一旦在后端将其更改为out for delivery,我想实时指向该栏以订购out for delivery 这是我的跟踪订单活动 public void onCreate(Bundle savedInsta
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
try
{
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
setHasOptionsMenu(true);
}
catch(Exception ex) {
ex.getMessage();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
final View view = inflater.inflate(R.layout.fragment_track_order, container, false);
try
{
mView = view;
getOrders(); // It gives me all the orders on clicking spinner
}
catch(Exception ex)
{
GSLogger.e(ex);
showToast(getString(R.string.error_loading_fragments));
}
return view;
}
private void init_AppContents(final ArrayList<TrackOrderModel> ordersList)
{
try
{
final ArrayList<String> order_arr = new ArrayList<>();
for(TrackOrderModel trackOrderModel : ordersList)
{
order_arr.add(trackOrderModel.getRestaurant_name()+" "+trackOrderModel.getData_time());
}
final SpinnerAdapter area_arrayAdapter = new SpinnerAdapter(getActivity(),
android.R.layout.simple_spinner_dropdown_item, order_arr);
order_spinner.setAdapter(area_arrayAdapter);
order_spinner.setSelection(0);
order_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3)
{
order_id = ordersList.get(position).getOrder_id();
tran_id = ordersList.get(position).getOrder_id();
if(!order_id.equals("0"))
getOrderStatus(order_id); // Based on the order id, it displays particular order status. Here I want it to change every 30 seconds.
else
{
order_received_circle.setImageResource(R.mipmap.circle_grey);
order_ready_progress.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.light_grey_2));
order_ready_circle.setImageResource(R.mipmap.circle_grey);
order_deliver_progress.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.light_grey_2));
order_deliver_circle.setImageResource(R.mipmap.circle_grey);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
catch(Exception ex)
{
GSLogger.e(ex);
showToast(getString(R.string.error_init_content));
}
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
尝试
{
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u INPUT\u ADJUST\u PAN);
设置选项菜单(真);
}
捕获(例外情况除外){
例如getMessage();
}
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态)
{
最终视图=充气机。充气(R.layout.fragment\u track\u order,container,false);
尝试
{
mView=视图;
getOrders();//它提供单击微调器时的所有命令
}
捕获(例外情况除外)
{
GSLogger.e(ex);
showtoos(getString(R.string.error_loading_fragments));
}
返回视图;
}
私有void init_AppContents(最终ArrayList ordersList)
{
尝试
{
最终ArrayList顺序_arr=新ArrayList();
用于(TrackOrderModel TrackOrderModel:ordersList)
{
order_arr.add(trackOrderModel.getRestaurant_name()+“”+trackOrderModel.getData_time());
}
最终SpinnerAdapter区域_arrayAdapter=新SpinnerAdapter(getActivity(),
android.R.layout.simple\u微调器\u下拉菜单\u项目、订单\u arr);
订购微调器。设置适配器(区域阵列适配器);
订单_微调器设置选择(0);
order_spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共位置(适配器视图arg0、视图arg1、内部位置、长arg3)
{
order_id=ordersList.get(position.getOrder_id();
tran_id=ordersList.get(position.getOrder_id();
如果(!order_id.等于(“0”))
getOrderStatus(order_id);//根据订单id,它显示特定的订单状态。这里我希望它每30秒更改一次。
其他的
{
接收到的订单\u circle.setImageResource(R.mipmap.circle\u grey);
order_ready_progress.setBackgroundColor(ContextCompat.getColor(getActivity(),R.color.light_grey_2));
order_ready_circle.setImageResource(R.mipmap.circle_grey);
order_deliver_progress.setBackgroundColor(ContextCompat.getColor(getActivity(),R.color.light_grey_2));
order_deliver_circle.setImageResource(R.mipmap.circle_grey);
}
}
@凌驾
未选择公共无效(AdapterView arg0){
}
});
}
捕获(例外情况除外)
{
GSLogger.e(ex);
showtoos(getString(R.string.error_init_content));
}
}
我们将不胜感激 您可以使用Firebase云消息传递,使用计时器轮询服务器以获取结果不是一个好方法,因为这不是一种省电的方法。 使用FCM,当后端服务器更新数据并发出关于数据的通知时,您将能够接收通知(您可以使用该通知进行实际用户通知或仅接收有效负载)。 这是一种有效的方法,因为它由谷歌管理,实现得更好 阅读本文档。
您可以使用广播接收器检查订单状态,并在订单状态更改时向用户显示通知,另一种方法是使用可运行线程或计时器()要每30秒发送一次请求并检查订单状态当管理员将订单状态更改为“已接受”或“已暂停”时,为什么不请求web端发出无声通知,在收到通知时使用本地广播刷新您的列表。您当前使用的是什么解决方案?@UmarHussain我是android新手。如果你能给我任何解决办法,那就好了。我正在考虑计时器任务。我不知道去哪里put@MohdSaquib你能给我任何链接让我参考吗?你可以通过管理员和移动应用程序设置firebase通知设置,在收到通知后,只需通过firebase通知服务向trackorderscreen发送广播。下面是链接将通过它。诚实地说,使用计时器每30秒检查一次是一个糟糕的解决方案。如果您已经能够在后端工作,那么为应用程序构建一个通知。其他人解释了如何使用firebase。
事件触发的
刷新是更好的设计,对性能也更好。无需使用额外的线程并保持设备繁忙。但是,如果您想使用计时器版本,我建议您使用类似于Quartz
的东西,这基本上是一个可编程的Cronjob。