2017-08-29 2 views
3

Ich arbeite am Track-Bestellbildschirm. Nachdem der Benutzer eine Bestellung aufgegeben hat, nimmt der Administrator Änderungen am Bestellstatus vor: Akzeptiert von Ausstehend. Ich möchte den Bestellstatus in Echtzeit auf dem Track-Order-Bildschirm anzeigen. Wenn sich der Administrator am Back-End ändert, sollte der Status geändert werden.Aktualisierung des Bestellstatus alle 30 Sekunden

Hier ist der Einstiegsbildschirm beim Klicken auf Track Order Button. http://imgur.com/a/5NCFH

Wenn die Dropdown-Liste Benutzer ausgewählt ist, werden alle auf dem Benutzer basierenden Bestellungen angezeigt. http://imgur.com/a/PiKf1

Hier ist die Spur Reihenfolge Bildschirm nach der Auswahl bestimmter Reihenfolge http://imgur.com/a/AdxLO. Wie auf dem Bild, einmal am Back-End für die Lieferung geändert, in Echtzeit möchte ich zeigen, dass die Bar für die Lieferung bestellen.

Hier ist meine Track Reihenfolge Aktivität.

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

Hilfe wäre willkommen.

+0

warum Sie nicht nach einer stillen Benachrichtigung vom Web-Ende fragen, wenn Admin Änderungen im Auftragsstatus auf Angenommen von Anstehend setzt, wenn Sie eine Benachrichtigung erhalten, verwenden Sie die lokale Übertragung, um Ihre Liste zu aktualisieren. –

+0

Welche Lösung verwenden Sie derzeit? –

+0

@UmarHussain Ich bin neu bei Android. Wenn Sie mir eine Lösung geben könnten, wäre das in Ordnung. Ich denke an Timer-Aufgabe. Ich weiß nicht, wohin ich setzen soll – Jacky

Antwort

1

können Sie Broadcast-Empfänger verwenden, um Status zu überprüfen und auf eine Benachrichtigung an Benutzer anzuzeigen, wenn Auftragsstatusänderung, andere Möglichkeit, einen ausführbaren Thread oder Timer zu verwenden ist(), um eine Anfrage zu senden und den Status überprüfen, um alle 30 Sekunden

+0

Ich habe Runable Thread verwendet. Es funktioniert gut – Jacky

+0

Die Verwendung eines Timers zur Überprüfung alle 30 Sekunden ist eine schlechte Lösung um ehrlich zu sein. Wenn Sie bereits im Backend arbeiten können, erstellen Sie eine Benachrichtigung für die App. Andere erklärten, wie mit Firebase. Ein "Event getriggertes" Refresh ist ein besseres Design und ist besser für die Performance. Sie müssen keinen zusätzlichen Thread verwenden und das Gerät beschäftigt halten. Wenn Sie jedoch die Timer-Version verwenden möchten, würde ich außerdem empfehlen, etwas wie 'Quartz' zu verwenden, was im Grunde ein programmierbarer Cronjob ist. – Nico

1

Sie könnten Firebase Cloud Messaging verwenden, Abfragen des Servers für die Ergebnisse mit dem Timer ist kein guter Weg, da es nicht energieeffiziente Weise. Mit FCM können Sie Benachrichtigungen erhalten (die Sie entweder für die eigentliche Benutzerbenachrichtigung oder nur zum Empfangen der Nutzdaten verwenden können), wenn der Back-End-Server die Daten aktualisiert und eine Benachrichtigung über Daten auslöst. Dies ist ein effizienter Weg, wie von Google mit besserer Implementierung verwaltet

Lesen Sie diese Dokumentation. https://firebase.google.com/docs/cloud-messaging/

+0

Wird durchgehen. – Jacky

Verwandte Themen