养乐多滋滋滋 2024-06-15 09:37 采纳率: 94.4%
浏览 5
已结题

判断用户id不为空,并且不能往下执行

我想实现,在安卓界面进行扫码的时候,用户id如果为空,就不能往下执行,并且给个友情提示,以下是我的代码和效果图

img

如图,用户id99,再没获取前,就不能往下执行

关键代码

 public void onData(ScanDataCollection scanDataCollection) {
        if ((scanDataCollection != null) && (scanDataCollection.getResult() == ScannerResults.SUCCESS)) {
            ArrayList <ScanData> scanData = scanDataCollection.getScanData();
            for(ScanData data : scanData) {
              //  updateData("<font color='gray'>" + data.getLabelType() + "</font> : " + data.getData());
                //  Log.i("data.getData()扫码回码的数据是",data.getData());
                //  Log.i("data.getLabelType()扫码回码的类型是", String.valueOf(data.getLabelType()));

                //判断扫描的是什么类型的码
                String s  = data.getData();
                Log.i("Ssssssssssssssss",s);
                //截取id只要前10位置


                TextView textView = (TextView) findViewById(R.id.USER_id);
                if (textView.getText()==null||textView.getText().toString().equals("")){
                    Toast.makeText(getApplicationContext(), "用户条码为空!请重新扫码!", Toast.LENGTH_SHORT).show();

                } else if(s.indexOf("U01|") != -1){//用户名条码
                    //判断上来是否先扫用户码
                    s =  s.substring(4);
                    finalUserId=s;
                    USER_ids.setText(finalUserId);
                }


                if(s.indexOf("-") == -1&&s.indexOf("|") == -1){//任务条码CODE128,共12位数据,10位数据2位校验码
                    if (s==null){

                    }
                    s =  s.substring(0, 10);
                    finalId=s;
                    Log.i("S的数据是",s);

                }
                // 更新TextView显示扫描数据
//                String displayText = "<font color='gray'>" + data.getLabelType() + "</font> : " + data.getData();




//                User user=new User();
//                user.input.id="2";
//                user.input.name=data.getLabelType() +":"+data.getData();

                //**********For Jin Begin**********
//                Json json = new Json();
//                json.input.id="175";
//                json.input.FLAG=data.getLabelType() +":"+data.getData();
//                json.input.USER=data.getLabelType() +":"+data.getData();
//                json.input.S0=data.getLabelType() +":"+data.getData();
//                json.input.CNT1=data.getLabelType() +":"+data.getData();
//                json.input.CNT2=data.getLabelType() +":"+data.getData();

//                json.input.id="175";
//                json.input.FLAG="12";
//                json.input.USER="1";
//                json.input.S0="";
//                json.input.CNT1="0";
//                json.input.CNT2="0";
                //**********For Jin end**********



                new Thread(new Runnable() {
                    @Override
                    public void run() {

//                        OkHttpUtils builder = OkHttpUtils
//                                .builder();
////                        builder.url("http://192.168.10.254:18081/");
//                        //**********For Jin Begin**********
//                        builder.url("http://192.168.10.254:18081/MSG");
//                        //**********For Jin end**********
//                        builder.AddHeader("content-type", "application/json;charset=UTF-8");
////                        builder.post(user);
//                        //**********For Jin Begin**********
//                        builder.post(json);
                        DataModel dataModel = new DataModel();
                        dataModel.setID(Integer.parseInt(finalId));
                        dataModel.setFLAG(12);
                       dataModel.setUSER(Integer.parseInt(finalUserId));
                        // dataModel.setUSER(99);
                        dataModel.setS0("");
                        dataModel.setCNT1(0);
                        dataModel.setCNT2(0);

                        Gson gson = new Gson();
                        String json = gson.toJson(dataModel);
                        MediaType mediaType = MediaType.parse("application/json");



                        OkHttpClient client = new OkHttpClient().newBuilder().build();

                        RequestBody body = RequestBody.create(mediaType, json);
//                        RequestBody body = RequestBody.create(mediaType,
//                                "{\r\n    \"ID\" : 10242," +
//                                        " \r\n    \"FLAG\" : 12," +
//                                        " \r\n    \"USER\" : 99," +
//                                        " \r\n    \"S0\" : \"\"," +
//                                        "\r\n    \"CNT1\" : 0," +
//                                        "\r\n    \"CNT2\" :  " +
//                                        "\r\n}");
                        Request request = new Request.Builder()
                                .url("http://192.168.10.10:18081/MSG")
                                .method("POST", body)
                                .addHeader("Content-Type", "application/json")
                                .build();


                        Response response = null;
                        try {
                            response = client.newCall(request).execute();
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                        String responseData = null;
                        try {
                            responseData = response.body().string();
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                        Log.w("回码数据--------------------------------》",responseData);

                        // 使用Handler将响应数据发送到主线程
                        Message message = mHandler.obtainMessage();
                        message.what = 0;
                        message.obj = responseData;

                        mHandler.sendMessage(message);


                        // 使用DataModel对象构建请求体

                        //**********For Jin end**********
//                        builder.async(new OkHttpUtils.ICallBack() {
//                            @Override
//                            public void OnSuccessful(Call call, String data) {
//                                updateData(data);
//                            }
//
//
//                            @Override
//                            public Void OnFailure(Call call, String data) {
//                                return null;
//                            }
//                        });
                    }
                }).start();
            }
        }
    }

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-06-15 09:37
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据您提供的代码和需求,您希望在用户ID为空时阻止扫码操作继续执行,并给出提示。以下是对您代码的一些优化建议:

    1. 检查用户ID是否为空:您已经在代码中添加了检查用户ID是否为空的逻辑,但是这个检查应该放在循环的开始部分,以确保在处理任何扫码数据之前先验证用户ID。

    2. 使用findViewById获取TextView:您在循环内部多次调用findViewById来获取TextView,这可能会导致性能问题。建议将获取TextView的代码移动到循环外部,并将其存储在一个变量中,以便在整个方法中重复使用。

    3. 使用Toast显示提示信息:您已经使用了Toast来显示提示信息,这是正确的做法。

    4. 优化线程操作:在您的代码中,您创建了一个新线程来发送网络请求。确保在用户ID为空的情况下不要执行这个线程。

    下面是根据上述建议优化后的代码示例:

    public void onData(ScanDataCollection scanDataCollection) {
        if ((scanDataCollection != null) && (scanDataCollection.getResult() == ScannerResults.SUCCESS)) {
            TextView textView = (TextView) findViewById(R.id.USER_id); // 移动到循环外部
    
            ArrayList<ScanData> scanData = scanDataCollection.getScanData();
            for (ScanData data : scanData) {
                String s = data.getData();
                Log.i("Ssssssssssssssss", s);
    
                // 先检查用户ID是否为空
                if (textView.getText() == null || textView.getText().toString().isEmpty()) {
                    Toast.makeText(getApplicationContext(), "用户条码为空!请重新扫码!", Toast.LENGTH_SHORT).show();
                    continue; // 跳过此次循环,不执行下面的代码
                }
    
                // 处理扫码数据的其余逻辑...
                // ...
    
                // 确保在用户ID不为空时才执行网络请求
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        // 网络请求代码...
                    }
                }).start();
            }
        }
    }
    

    请注意,上述代码只是一个示例,您需要根据实际情况调整代码逻辑。

    至于参考资料,您可以查看以下资源来了解更多关于Android开发的信息:

    希望这些建议和资源对您有所帮助!如果您有其他问题或需要进一步的帮助,请随时告诉我。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 创建了问题 6月15日

悬赏问题

  • ¥15 求复现机器学习文章一篇
  • ¥15 爬虫抓取数据|解析视频文本内容(相关搜索:自动化)
  • ¥15 combobox绑定值改变的问题
  • ¥15 from seleniumwire import webdriver 在抓取http://链接的时候会自动转https://这个怎么解决
  • ¥15 hive直连数据库模式插入mysql表数据失败(相关搜索:数据库)
  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 下载ctorch报错,求解