2017-08-29 149 views
3

我正在追踪订单屏幕上。在用户下订单后,Admin将订单状态更改为接受待定。我想在跟踪订单屏幕上实时显示订单状态。每当管理员在后端进行更改时,都应该更改状态。每30秒更新一次订单状态

这是点击追踪按钮的初始屏幕。 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)); 
    } 
} 

帮助将不胜感激。

+0

为什么当管理员将订单状态更改为从待处理接受时,您在收到通知时使用本地广播刷新您的列表时,不会要求网络端发出无声通知。 –

+0

你目前使用什么解决方案? –

+0

@UmarHussain我是android新手。如果你可以给我任何解决方案,那很好。我正在考虑计时器任务。我不知道在哪里放 – Jacky

回答

1

您可以使用广播接收器来检查订单状态,并显示给用户一个通知,当订单状态的变化,另一种方法是使用一个运行的线程或计时器()发送一个请求,并检查订单状态每30秒

+0

我使用了Runnable线程。它工作正常 – Jacky

+0

使用定时器每30秒检查一次是一个不好的解决方案。如果您已经有能力在后端工作,那么为应用程序构建通知。其他人解释了如何与firebase。 '事件触发'刷新是更好的设计,更好的表现。无需使用额外的线程并保持设备繁忙。 如果你想使用计时器版本,我还会推荐使用'Quartz',它基本上是一个可编程的Cronjob。 – Nico

1

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

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

+0

会经历它。 – Jacky