方法完成后变量 return null

variable return null after method finished

我正在尝试制作一个翻译文本并打印结果的函数。我正在使用 firebasetranslator。

通过调试,应用程序启动但文本框为空。试图在

上做个标记
private void setRisultato(String string){
            this.risultato = string;
}

我看到翻译后的文本已正确分配给结果变量。 但是如果我把标记放上去

public String getRisultato(){
    return risultato;
}

我看到什么结果是空的(不是空的),有人能解释一下为什么吗?

更新:

Traduttore.java

import android.app.Activity;
import androidx.annotation.NonNull;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.ml.common.modeldownload.FirebaseModelDownloadConditions;
import com.google.firebase.ml.naturallanguage.FirebaseNaturalLanguage;
import com.google.firebase.ml.naturallanguage.translate.FirebaseTranslateLanguage;
import com.google.firebase.ml.naturallanguage.translate.FirebaseTranslator;
import com.google.firebase.ml.naturallanguage.translate.FirebaseTranslatorOptions;


public class Traduttore extends Activity {
    private static String text1;

    public interface callbacktranslate {
        void onCallback(String risultato);
    }
    public void traduci(String textblock, final callbacktranslate callback){
        //clear string and start translate
        String blocktext = textblock.replaceAll("\n"," ");
        String blocktext2 = blocktext.replaceAll("\.","");
        String blocktext3 = blocktext2.toUpperCase();
        text1 = blocktext3;
        downloadTranslatorAndTranslate(callback);
    }
    public void translateText(FirebaseTranslator langTranslator, final callbacktranslate callback) {
        //translate source text to english
        langTranslator.translate(text1).addOnSuccessListener(
                        new OnSuccessListener<String>() {
                            @Override
                            public void onSuccess(@NonNull String translatedText) {
                                //make variable all uppercase and save it
                                String blocktext4 = translatedText.toUpperCase();
                                callback.onCallback(blocktext4);
                            }
                        })
                .addOnFailureListener(
                        new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                            }
                        });
    }
    public void downloadTranslatorAndTranslate(final callbacktranslate callback) {
        int sourceLanguage = 11; //language source(en=11)
        //create translator for source and target languages
        FirebaseTranslatorOptions options =
                new FirebaseTranslatorOptions.Builder()
                        .setSourceLanguage(sourceLanguage)
                        .setTargetLanguage(FirebaseTranslateLanguage.IT)
                        .build();
        final FirebaseTranslator langTranslator =
                FirebaseNaturalLanguage.getInstance().getTranslator(options);
        //download language models if needed
        FirebaseModelDownloadConditions conditions = new FirebaseModelDownloadConditions.Builder()
                .build();
        langTranslator.downloadModelIfNeeded(conditions)
                .addOnSuccessListener(
                        new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void v) {
                                translateText(langTranslator,callback);
                            }
                        })
                .addOnFailureListener(
                        new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                            }
                        });
    }
}

MainActivity.java中的方法:

public ConstraintLayout vpp;
public TextView[] textViewArray = new TextView[500];
public int i;

public void StartReadImage(){
    FirebaseVisionImage image2 = FirebaseVisionImage.fromBitmap(resizedBitmap);
    FirebaseVisionTextRecognizer textRecognizer2 = FirebaseVision.getInstance()
            .getOnDeviceTextRecognizer();
    final Task<FirebaseVisionText> result2 =
            textRecognizer2.processImage(image2)
                    .addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
                        @Override
                        public void onSuccess(FirebaseVisionText firebaseVisionText) {
                            // Task completed successfully
                           i = 0;
                            resultText = firebaseVisionText.getText();

                            for (FirebaseVisionText.TextBlock block: firebaseVisionText.getTextBlocks()) {
                                String blockText = block.getText();
                                Float blockConfidence = block.getConfidence();
                                List<RecognizedLanguage> blockLanguages = block.getRecognizedLanguages();

                                final  Point[] blockCornerPoints = block.getCornerPoints();
                                final  Rect blockFrame = block.getBoundingBox();

                                traduttore.traduci(blockText, new Traduttore.callbacktranslate() {
                                    @Override
                                    public void onCallback(String result) {
                                        createCover(blockCornerPoints, blockFrame, result, i);
                                        i++;
                                    }
                                });
                            }
                        }
                    })
                    .addOnFailureListener(
                            new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception e) {
                                    // Task failed with an exception
                                }
                            });
}
public void createCover(Point[] CornerPoint,Rect blockFrame,String blockText, int i){

            textViewArray[i] = new TextView(context);
            textViewArray[i].setTextSize(9);
            textViewArray[i].setGravity(Gravity.CENTER);
            textViewArray[i].setTextColor(Color.BLACK);
            textViewArray[i].setBackgroundColor(Color.rgb(225, 225, 225));
            textViewArray[i].setHeight(blockFrame.height());
            textViewArray[i].setWidth(blockFrame.width());
            textViewArray[i].setX(CornerPoint[0].x);
            textViewArray[i].setY(CornerPoint[0].y);

            textViewArray[i].setText(blockText);
            vpp.addView(textViewArray[i]);
}

您需要在某处设置回调,为此,您需要将其添加到几个地方,并适当地传递它

traduci(String textblock, final Callback callback)

downloadTranslatorAndTranslate(final Callback callback)

translateText(FirebaseTranslator langTranslator, final Callback callback)

从那里,您需要将回调添加到 Activity 方法调用,并且该方法应该是无效的,因为回调稍后来自方法实际 returns

public void Traduciblocco(String abc){
    traduttore.traduci(abc, new Callback() {
        @Override 
        public void onCallback(String result) {
            // resultTxt.setText(result); 
        } 
    });
}