首页 > 解决方案 > 如何在 Google-App 上允许快速发布请求?

问题描述

我正在设置一个 android 订单接收应用程序,并且需要将订单存储在谷歌表格中。它可以工作,但是直到我在 for 循环中添加了发布请求功能。所以我通过在 for 循环中添加延迟来解决这个问题。但是,还有其他方法可以做到这一点吗?因为每次我提交订单时,应用程序都会滞后到 for 循环完成。

我添加了一个 thread.sleep 来避免这个问题,如下所示:

for (int i = 0; i < order.size(); i++){
    String itemName = order.get(i);
    String addOn = addOns.get(i);
    String quantity = order.get(i);
    quantity = quantity.substring(quantity.length() -  2, quantity.length() - 1);
    itemName = itemName.substring(0, itemName.length() - 4);

    System.out.println("Item ID: " + i + " " + itemName + " " + addOn + " " + quantity + " " + orderId );
    try{
        Thread.sleep(550); //This is the delay I added.
    }catch(InterruptedException ex){
        //do stuff
    }

    addItemToSheet(itemName,addOn,quantity,orderId);
}

    if (null != getActivity()) {
        ((MainActivity) getActivity()).clearOrderList();
    }

这是谷歌应用程序:

var ss = SpreadsheetApp.openByUrl("SPREADSHEET URL");

var sheet = ss.getSheetByName('Items'); 

function doPost(e){
  var action = e.parameter.action;

  if(action == 'addItem'){
    return addItem(e);
  }

}


function addItem(e){

  var date =  new Date();

  var id  =  sheet.getLastRow(); 

  var orderNum = e.parameter.orderNum;

  var itemName = e.parameter.itemName;

  var quantity = e.parameter.quantity;

  var extra = e.parameter.extra;



  sheet.appendRow([date,id,orderNum,itemName,quantity,extra]);

  return ContentService.createTextOutput("Success").setMimeType(ContentService.MimeType.TEXT);

}

我可以对 java 循环或谷歌应用程序做些什么,所以我可以避免使用 thread.sleep 冻​​结我的应用程序直到操作完成?也许是在java中延迟的另一种方法?或在谷歌应用程序中更快的操作?

标签: javaandroidgoogle-apps-scriptgoogle-sheets

解决方案


为了实现你想要的,我会推荐多线程。

多线程是一种 Java 功能,它允许同时执行程序的两个或多个部分,以最大限度地利用 CPU。这种程序的每一部分都称为一个线程。因此,线程是进程中的轻量级进程。

这样,您的应用程序将在另一个线程中处理 POST 请求时继续在线程中运行。请记住,为了 wait(),和notify()方法。

上述方法用于控制您的工作流程。

  • wait():此方法的行为与它只是执行调用 wait(0) 完全相同。
  • notify():此方法唤醒正在等待此对象监视器的单个线程。

有关 Java 中的多线程的更多详细信息,请参见此处

在这里,您将找到有关上述方法的更多详细信息。


推荐阅读