每30秒更新一次订单状态

时间:2017-08-29 05:39:42

标签: java android

我正在使用Track order屏幕。用户下订单后,管理员会将订单状态的更改从待处理更改为已接受。我想在Track Order屏幕上实时显示订单状态。每当管理员在后端更改时,都应更改状态。

这是点击跟踪订单按钮的初始屏幕。 http://imgur.com/a/5NCFH

当用户选择下拉菜单时,将显示基于用户的所有订单。 http://imgur.com/a/PiKf1

这是选择特定订单后的跟踪订单屏幕 http://imgur.com/a/AdxLO。根据图像,一旦在后端将其更改为输出,实时我想指出要排序以便交付。

这是我的跟踪订单活动。

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));
    }
}

帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用Firebase云消息传递,使用计时器轮询服务器的结果不是一个好方法,因为它不是高效的方式。 使用FCM,当后端服务器更新数据并触发有关数据的通知时,您将能够接收通知(可用于实际用户通知或仅接收有效负载)。 这是一种有效的方式,因为它由Google管理,具有更好的实施方式

阅读本文档。 https://firebase.google.com/docs/cloud-messaging/

答案 1 :(得分:1)

您可以使用广播接收器检查订单状态并在订单状态更改时向用户显示通知,另一种方法是使用Runnable线程或Timer()每30秒发送一次请求并检查订单状态