Android 安卓截击请求怪异”;“1秒”;多次快速点击之间的延迟

Android 安卓截击请求怪异”;“1秒”;多次快速点击之间的延迟,android,json,delay,android-volley,android-imagebutton,Android,Json,Delay,Android Volley,Android Imagebutton,对不起,我的英语不好,但我有问题,无法解决 我的片段中有自定义listview,用于从JSON数组中获取产品。我在每个listview行中有3个ImageButton 加号按钮(+),减号按钮(-)和删除按钮(X) 所以,当我单击每个按钮时,它会调用JSON请求来更新产品的单件号,从响应中获取新数据并重新填充数组列表 一切正常,但当我更快地点击该按钮时,多个请求之间似乎有1秒的延迟,即使第一次截击请求之前已经完成了 下面是我在TableAdapter.java中的JSON方法 public vo

对不起,我的英语不好,但我有问题,无法解决

我的片段中有自定义listview,用于从JSON数组中获取产品。我在每个listview行中有3个ImageButton

加号按钮(+),减号按钮(-)和删除按钮(X

所以,当我单击每个按钮时,它会调用JSON请求来更新产品的单件号,从响应中获取新数据并重新填充数组列表

一切正常,但当我更快地点击该按钮时,多个请求之间似乎有1秒的延迟,即使第一次截击请求之前已经完成了

下面是我在TableAdapter.java中的JSON方法

public void JSON(final int position, final int process) {

    if (inProgress==false) {
        dialog = new ProgressDialog(myContext);
        dialog.setMessage("Updating.....");
        dialog.show();
        inProgress = true;
        System.out.println("**** Now request is beginning............");

        final int rowID = tableModelList.get(position).getID();
        final int treeID = tableModelList.get(position).getAna_dal();
        final float price = tableModelList.get(position).getBFiyat();
        final int quantity = tableModelList.get(position).getAdet();
        final int print = tableModelList.get(position).getYazdimi();

        final String insertUrl = "http://"+getServer+"/t6mobilservice/order-piece.php";

        Map<String, String> parameters  = new HashMap<>();
        parameters.put("tableID", "" + getTableId);
        parameters.put("rowID", "" + rowID);
        parameters.put("treeID", ""+treeID);
        parameters.put("process",""+process);
        parameters.put("quantity",""+quantity);
        parameters.put("price",""+price);
        parameters.put("print",""+print);

        CustomRequest jsObjRequest = new CustomRequest(Request.Method.POST, insertUrl, parameters, new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray getOrders = response.getJSONArray("order");

                    Gson gson = new Gson();

                    tableModelList.clear();
                    for (int i = 0; i < getOrders.length(); i++) {
                        JSONObject order = getOrders.getJSONObject(i);

                        TableModel tableModel = gson.fromJson(order.toString(), TableModel.class);
                        tableModelList.add(tableModel);
                    }

                    mAdapter.notifyDataSetChanged();

                    System.out.println("**** onResponse: Request is done............");
                    System.out.println("**** JSON: "+response.toString());

                    dialog.cancel();
                    inProgress = false;

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError response) {
                Log.d("Response: ", response.toString());
                inProgress = false;
            }
        });

        requestQueue.add(jsObjRequest);
    }
}
public void JSON(最终整型位置,最终整型过程){
如果(inProgress==false){
dialog=新建ProgressDialog(myContext);
setMessage(“正在更新…”);
dialog.show();
inProgress=true;
System.out.println(“****现在请求开始了……”);
final int rowID=tableModelList.get(position.getID();
final int treeID=tableModelList.get(position.getAna_dal();
最终浮动价格=tableModelList.get(position.getBFiyat();
final int quantity=tableModelList.get(position.getAdet();
final int print=tableModelList.get(position.getYazdimi();
最后一个字符串insertUrl=“http://“+getServer+”/t6mobilservice/order-piece.php”;
映射参数=新的HashMap();
参数put(“tableID”,“getTableId”);
参数.put(“rowID”,“rowID+rowID”);
参数put(“treeID”,即“+treeID”);
参数。put(“进程”,“进程”+);
参数。put(“数量”、“数量”+);
参数。卖出价(“价格”、“价格”+);
参数。put(“打印”、“打印”+);
CustomRequest jsObjRequest=newcustomrequest(Request.Method.POST,insertUrl,parameters,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
JSONArray getOrders=response.getJSONArray(“订单”);
Gson Gson=新的Gson();
tableModelList.clear();
对于(int i=0;i
对话框在请求开始时显示,在请求完成时取消。但正如我所说的,当我点击得更快时,即使第一个请求已经完成,多个请求之间也会有延迟。我说的是1秒,因为第二个请求是在1秒之后开始的,不管我点击的速度有多快。我想不出来

我测试了快速点击以显示带有随机数字的祝酒词,效果很好。但当我使用JSON方法进行测试时,有一个奇怪的延迟

在我的片段中有SwipeRefreshLayout和ScrollView。 我在和辛格尔顿截击

编辑1:让我们来看看我的问题是什么

编辑2:这里是每一次点击的答案

每次快速点击都会返回成功json输出,但不会立即更改


感谢您的帮助。

只需创建布尔inProgress,如果inProgress==true,并且当请求为onResponse或onErrorResponse设置inProgress=false时,不要启动相同的请求@VladimirKulyk谢谢你的建议,我做到了。我正在检查布尔inProgress,如果为false,则将其更改为inProgress=true并执行请求。。onResponse或onErrorResponse将其转换为false。。如果已经是真的,那就什么也不做。但我仍然有同样的问题,因为正如我所说的,第一个请求在第二个请求中成功完成。第二次请求仍有1秒延迟。我正在编辑我的问题,添加视频链接。你可以看到问题出在哪里is@Tevfic我播下你的视频,你的应用程序工作正常,第一次点击开始请求,2,3。。。快速点击没有任何作用,因为第一个还没有完成,在第一个完成后,下一个请求将启动,依此类推。您可以创建队列(LinkedList)并在单击按钮时输入该编号,在第一个请求完成后,从LinkedList获取下一个值并开始下一个Request@VladimirKulyk如果我的应用程序工作正常,为什么每次点击都会显示对话框?因为对话框必须仅在
inProgress=false
时出现。如果第一个请求尚未完成,则inProgress仍然为true。那么,为什么会显示对话框呢?我可以看到Logcat的输出。每次快速点击都会返回成功输出。为Logcat输出添加新视频。正如你所看到的,每次点击都可以正常工作,但没有什么会立即改变。。有些事情出了问题。。谢谢你的支持