当前位置: 首页 > 知识库问答 >
问题:

将条形码存储在RecolyerView中后扫描并从JSON中读取

翟志新
2023-03-14

//1.我正在尝试使用ZXingScannerView扫描器传递条形码值

//2。那么如果扫描的条形码等于recyclerview中的JSON//文件中的JSON条形码对象show item_name和cost,我的问题是扫描后没有显示任何东西

@override公共视图onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){View View=inflater.inflate(r.layout.fragment_second,container,false);

    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
    scannerView = (ZXingScannerView) view.findViewById(R.id.zxscan);
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
    recyclerView.setLayoutManager(linearLayoutManager);


    CustomAdapter customAdapter = new CustomAdapter(getActivity(), products_name, cost);
    recyclerView.setAdapter(customAdapter); // set the Adapter to RecyclerView


    Dexter.withActivity(getActivity())
            .withPermission(Manifest.permission.CAMERA)
            .withListener(new PermissionListener() {
                @Override
                public void onPermissionGranted(PermissionGrantedResponse response) {
                    scannerView.setResultHandler(SecondFragment.this);
                    scannerView.startCamera();
                }

                @Override
                public void onPermissionDenied(PermissionDeniedResponse response) {
                    Toast.makeText(getActivity(), "Please Accept The Permission", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
                }
            })
            .check();
    return view;
}

@Override
public void onDestroy() {
    scannerView.stopCamera();
    super.onDestroy();
}


@Override
public void handleResult(Result rawResult) {
    processRawResult(rawResult.getText());
    if (Patterns.WEB_URL.matcher(rawResult.getText()).matches()) {
        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(rawResult.getText()));
        startActivity(browserIntent);
    }
}

private void processRawResult(String text) {
    if (text.startsWith("BEGIN:")){
        String[] tokens = text.split("\n");
        QRVCardModel qrvCardModel = new QRVCardModel();
        for (int i = 0; i < tokens.length; i++)
        {
            if (tokens[i].startsWith("BEGIN:")) {
                qrvCardModel.setType(tokens[i].substring("BEGIN:".length()));
            }

            else if (tokens[i].startsWith("N")) {
                qrvCardModel.setName(tokens[i].substring("N:".length()));
            }

            else if (tokens[i].startsWith("ORG")) {
                qrvCardModel.setOrg(tokens[i].substring("ORG:".length()));
            }

            else if (tokens[i].startsWith("TEL:")) {

                qrvCardModel.setTel(tokens[i].substring("TEL:".length()));
            }

            else if (tokens[i].startsWith("URL:")) {
                qrvCardModel.setUrl(tokens[i].substring("URL:".length()));
            }

            else if (tokens[i].startsWith("EMAIL:")) {
                qrvCardModel.setEmail(tokens[i].substring("EMAIL:".length()));
            }

            else if (tokens[i].startsWith("ADS:")) {
                qrvCardModel.setEmail(tokens[i].substring("ADS:".length()));
            }

            else if (tokens[i].startsWith("NOTE:")) {
                qrvCardModel.setNote(tokens[i].substring("NOTE:".length()));
            }

            else if (tokens[i].startsWith("SUMMERY:")) {
                qrvCardModel.setSummer(tokens[i].substring("SUMMERY:".length()));
            }
            else if (tokens[i].startsWith("DTSTART:")) {
                qrvCardModel.setDtstart(tokens[i].substring("DTSTART:".length()));
            }
            else if (tokens[i].startsWith("DTEND:")) {
                qrvCardModel.setDtend(tokens[i].substring("DTEND:".length()));
            }

        }

    }
    else if (text.startsWith("hhtp://")||
            text.startsWith("hhtps://")||
            text.startsWith("www."))

    {
        QRURLMode qrurlMode = new QRURLMode(text);

    }
    else if (text.startsWith("geo:"))
    {
        QRGeoModel qrGeoModel= new QRGeoModel();
        String delims = "[ ,?q= ] +";
        String tokens[]= text.split(delims);
        for (int i=0; i< tokens.length;i++)
        {
            if (tokens[i].startsWith("geo:"))
            {
                qrGeoModel.setLat(tokens[i].substring("geo:".length()));
            }
        }
        qrGeoModel.setLat(tokens[0].substring("geo".length()));
        qrGeoModel.setLng(tokens[1]);
        qrGeoModel.setGeo_place(tokens[2]);

    }
    else
    {
        Toast.makeText(getActivity(),"QR CODE PASS", Toast.LENGTH_SHORT).show();


        String json;


        try {

            InputStream is = getActivity().getAssets().open("products.json");
            Toast.makeText(getActivity(), "JSON1", Toast.LENGTH_SHORT).show();
            int size = is.available();
            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();
            //Toast.makeText(getActivity(),"JSON2", Toast.LENGTH_SHORT).show();
            json = new String(buffer, "UTF-8");

            Log.d("JSONTestLogs", "JSON Raw Text: " + json);
            JSONObject object = new JSONObject(json);
            JSONArray productsArray = object.getJSONArray("products");
            Log.d("JSONTestLogs", "Fetching the Products array from JSON File. Size: " + productsArray.length());
            for (int i = 0; i < productsArray.length(); i++) {
                JSONObject item = productsArray.getJSONObject(i);
                Log.d("JSONTestLogs", "Item: " + i + "\n" + item.toString());

                if (text.equals(item.getString("bar_code"))) {
                    products_name.add(item.getString("item_name"));
                    cost.add(item.getString("cost"));
                }
            }

        }
        catch
        (IOException e)
        {

            e.printStackTrace();
        }
        catch (JSONException e){
            e.printStackTrace(); }

    }


    scannerView.resumeCameraPreview(SecondFragment.this);
    // Toast.makeText(getActivity(),"JSON3", Toast.LENGTH_SHORT).show();
}

}

共有1个答案

相化
2023-03-14

在你扫描了条形码之后。我想在这里把条形码加到你的清单上;

products_name.add(item.getString("item_name"));

添加操作后,您没有刷新recyclerview数据。

此代码部分只工作一次。

CustomAdapter customAdapter = new CustomAdapter(getActivity(), products_name, cost);
    recyclerView.setAdapter(customAdapter); // set the Adapter to RecyclerView

您应该再次调用这个部分,或者您需要在适配器中使用一个函数,即notify the data of RecyclerView。

 类似资料:
  • 我试图启动条形码扫描器上的用户按下一个按钮在HTML。然而,我又犯了一个错误: 在javascript中使用: 现在,在Java文件中,我有以下代码,它在中声明函数

  • 使用ML Kit的条码扫描API,您可以读取大多数使用标准条码格式编码的数据。 条形码是将信息从现实世界传递到应用程序的一种便捷方式。特别是,使用QR码等二维格式时,您可以编码结构化数据,如联系人信息或WiFi网络凭证。由于ML Kit可以自动识别和解析这些数据,因此当用户扫描条形码时,您的应用可以进行智能响应。 iOS Android 关键功能 阅读大多数标准格式 线性格式:Codabar,Co

  • 我有一个物理条形码扫描仪插入我的设备,我试图使用它扫描条形码太小,相机无法聚焦。 在我的活动中,这些是我用来检查按键的2个函数,因为我假设它是作为硬件键盘处理的。 什么能让它通过? 提前致谢

  • 我想通过使用扫描仪扫描每个物品的条形码,为我们的仓库制作一个库存opname,并将结果保存在谷歌电子表格中。

  • 我需要阅读申请的条形码。我正在使用触发器条形码扫描仪。通讯是通过USB。 如你所知,条形码扫描仪的工作方式就像键盘一样。当设备读取条形码时,它试图将该值写入具有焦点的输入。用户按下触发器,条形码扫描器工作,直到条形码读取成功。然后它就会进入待机模式。理想的方式读取大量条形码。 在xml端添加了上面的行。 它检测EditText何时失去焦点。但我不能把它分配回来。我确保EditText在触摸模式下是

  • 本文向大家介绍iOS 条码及二维码扫描(从相册中读取条形码/二维码)及扫码过程中遇到的坑,包括了iOS 条码及二维码扫描(从相册中读取条形码/二维码)及扫码过程中遇到的坑的使用技巧和注意事项,需要的朋友参考一下 文章重点介绍如何解决,从手机相册中读取条形码和二维码的问题 1.扫码. 网上有特别的关于iOS扫码的代码和示例,其中扫码主要使用的是自带的AVFoundation类.这里就不细说了,要注意