字符串不是在 Android Studio 中的第一次按钮点击时构建的

问题描述

我正在制作一个文本识别应用程序,一个非常基本的应用程序。用户目前可以从他们的图库中抓取照片,它会出现在应用程序中,以及将图像中的文本转换为 pdf 格式的选项。问题是,我必须调用函数两次,以便我的 String 变量正确获取它应该拥有的信息,特别是文本识别结果。第一次,我可以看到正在使用正确的位图,并且在构建字符串的方法中。我已经为这些情况制作了日志,以尝试追踪问题以及第一次没有正确制作的地方,但是经过数小时的搜索后我找不到任何东西。有人请指教。

    private String processtextRecognitionToPDF(Text texts){
        
        blocks = texts.getTextBlocks();
        if (blocks.size() == 0) {
            stringBuilder.append("There was no text found");
            return null;
        }
        //resultText = texts.getText();
        for (Text.TextBlock block : texts.getTextBlocks()) {
            blockText += block.getText()+" ";
            Log.e(TAG,"processtextRecognitionToPDF: checking blockText result "+blockText );
        }
        return blockText;
        
    }

我已经尝试在上面显示的 for 循环内部,在它外部,在其他方法中使用 stringBuilder。奇怪的是,在这里,我放置了一个日志,blockText 被视为包含我想要的信息。

返回 blockText 是将其设置为等于某物的替代方法,我认为可能在 for 循环内部会使 blockText 被遗忘。

退出方法后,日志显示 blockText 恢复为我为其设置的认值。是的,我尝试使用 stringBuilder 在 for 循环内追加,因为无论如何这都是可取的。第一次没有任何效果

然后,在我第二次点击按钮生成 PDF 时,blockText 神奇地选择了正确的信息并根据需要将其加载到 PDF 中。

一个重要的信息。当我遇到这个问题后选择一张新照片时,该新照片的第一个按钮点击将是上一张照片的文本结果。我已经尝试一直跟踪到源头,但我找不到发生这种情况的位置或原因。

更多可能相关的代码

mGeneratePDF.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // calling method to
                // generate our PDF file.
                new Handler().post(new Runnable() {
                    @Override
                    public void run() {
                        generatePDF();
                    }
                });

            }
        });

~~~~~~~~

 private void generatePDF() {
        
        PdfDocument pdfDocument = null;

        if(mSelectedImage != null){
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
                generatePDFFileName();
                pdfDocument = new PdfDocument();
                
                Paint paint = new Paint();
                Paint title = new Paint();
              
                PdfDocument.PageInfo mypageInfo = new PdfDocument.PageInfo.Builder(pagewidth,pageHeight,1).create();

                
                PdfDocument.Page myPage = pdfDocument.startPage(mypageInfo);

                
                Canvas canvas = myPage.getCanvas();

                title.setTypeface(Typeface.create(Typeface.DEFAULT,Typeface.norMAL));
         
                title.setTextSize(10);
               
                title.setColor(ContextCompat.getColor(this,R.color.purple_200));
                               
                title.setTextAlign(Paint.Align.CENTER);
                title.setSubpixelText(true);
                runTextRecogToPDF(canvas,title);
                
                int length = stringBuilder.length();
                // even though stringBuilder should be complete Now,it is still empty at this point on first click
                Log.e(TAG,"generatePDF: checking stringbuilder "+ stringBuilder.toString() );

                if (length == defaultTextLength){
                    Log.e(TAG,"generatePDF: checking blocktext "+ blockText );
                    stringBuilder.append(blockText);
                }
                canvas.drawText(stringBuilder.toString(),400,title);
                Log.e(TAG,"generatePDF: checking mSelectedImage is valid "+ mSelectedImage );
                stringBuilder.delete(0,stringBuilder.length());
                stringBuilder.append(defaultText);
                
                pdfDocument.finishPage(myPage);
              
                FileOutputStream os = null;
                File file = new File(Environment.getExternalStorageDirectory(),fileName);
                if (file.exists()){
                    generatePDFFileName();
                    file = new File(Environment.getExternalStorageDirectory(),fileName);
                }

                try {
                   
                    os = new FileOutputStream(file);
                    pdfDocument.writeto(os);
        
                    Toast.makeText(MainActivity.this,"PDF file generated succesfully.",Toast.LENGTH_SHORT).show();
                } catch (IOException e) {
                    // below line is used
                    // to handle error
                    e.printstacktrace();
                } finally {
                    pdfDocument.close();
                    try {
                        os.close();
                    } catch (IOException e) {
                        e.printstacktrace();
                    }
                }
            }
        }
        else{
            showToast("No image selected for PDF generation");
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)