Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 每30秒更新一次订单状态_Java_Android - Fatal编程技术网

Java 每30秒更新一次订单状态

Java 每30秒更新一次订单状态,java,android,Java,Android,我正在轨道订单屏幕上工作。用户下订单后,管理员将订单状态从待定更改为已接受。我想在轨道订单屏幕上实时显示订单状态。无论何时在后端更改admin,状态都应该更改 这是单击“轨迹顺序”按钮的初始屏幕 当用户选择下拉列表时,将显示基于用户的所有订单 这是选择特定顺序后的轨迹顺序屏幕 . 根据图片,一旦在后端将其更改为out for delivery,我想实时指向该栏以订购out for delivery 这是我的跟踪订单活动 public void onCreate(Bundle savedInsta

我正在轨道订单屏幕上工作。用户下订单后,管理员将订单状态从待定更改为已接受。我想在轨道订单屏幕上实时显示订单状态。无论何时在后端更改admin,状态都应该更改

这是单击“轨迹顺序”按钮的初始屏幕

当用户选择下拉列表时,将显示基于用户的所有订单

这是选择特定顺序后的轨迹顺序屏幕 . 根据图片,一旦在后端将其更改为out for delivery,我想实时指向该栏以订购out for delivery

这是我的跟踪订单活动

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。