异步任务错误:当用户插入一个字符串时,没有给出文本。

问题描述 投票:0回答:1

解决了。谁能帮我检查一下我的代码?我正在使用一个情感识别API,从用户输入的文本中生成字符串。我正在学习使用AsyncTask来加载结果,但是当用户在edittext处插入一个字符串时,出现了一个错误,显示 "No text given",这个错误是在doInBackground方法的try{}块的'catch'异常中检测到的。

public class Main3Activity extends AppCompatActivity {

    private TextView textmain1, textmain2;
    private EditText editText;
    private Button submitBtn;
    private String userInputText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        textmain1 = (TextView) findViewById(R.id.detected3);
        textmain2 = (TextView) findViewById(R.id.sentences3);
        editText = (EditText) findViewById(R.id.edittext3);
        submitBtn = (Button) findViewById(R.id.submitBtn3);

        userInputText = editText.getText().toString();

        submitBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MyAsyncTask myAsyncTask = new MyAsyncTask();
                myAsyncTask.execute(userInputText);
            }
        });
    }

    private class MyAsyncTask extends AsyncTask<String, Integer, Boolean> {

        private String detectedResponse, sentencesResponse;
        private ProgressBar progressBar;

        @Override
        protected void onPreExecute() {
            progressBar = (ProgressBar) findViewById(R.id.progressbar);
            progressBar.setVisibility(View.VISIBLE);
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }

        @Override
        protected Boolean doInBackground(String... strings) {
            String myString = strings[0];
            try {
                List<ToneScore> documentTones = new ArrayList<>();
                List<SentenceAnalysis> sentenceDetectedTones = new ArrayList<>();

                IamAuthenticator authenticator = new IamAuthenticator(authenticator);
                ToneAnalyzer toneAnalyzer = new ToneAnalyzer("2020-02-22", authenticator);
                toneAnalyzer.setServiceUrl(url);
                ToneOptions toneOptions = new ToneOptions.Builder().text(myString).build();
                ToneAnalysis toneAnalysis = toneAnalyzer.tone(toneOptions).execute().getResult();

                documentTones = toneAnalysis.getDocumentTone().getTones();

                if (documentTones == null || documentTones.isEmpty()) {
                    detectedResponse = "No tones are detected :(";
                } else {
                    StringBuilder detectedTones = new StringBuilder();
                    for (ToneScore score : documentTones) {
                        if (score.getScore() > 0.5f) {
                            detectedTones.append(score.getToneName()).append(" \n").append(score.getScore()).append("\n\n");
                        }
                    }
                    detectedResponse = detectedTones.toString();
                }

                sentenceDetectedTones = toneAnalysis.getSentencesTone();

                if (sentenceDetectedTones == null || sentenceDetectedTones.isEmpty()) {
                    sentencesResponse = "Oops! No sentence analysis is available for this one";
                } else {
                    StringBuilder sentenceTones = new StringBuilder();
                    for (SentenceAnalysis sentenceAnalysis : sentenceDetectedTones) {

                        List<ToneScore> singleScoreBlock = sentenceAnalysis.getTones();

                        for (ToneScore toneScore : singleScoreBlock) {
                            if (toneScore.getScore() > 0.5) {
                                sentenceTones.append("\"").append(sentenceAnalysis.getText()).append("\"");
                                sentenceTones.append("\n").append(toneScore.getToneName()).append(": ").append(toneScore.getScore()).append("\n\n");
                            }
                        }
                    }
                    sentencesResponse = sentenceTones.toString();
                }
            } catch (ArrayIndexOutOfBoundsException | IllegalArgumentException | ServiceResponseException e) {
                Main3Activity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(Main3Activity.this, "API error here: " + e.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });
            }
            publishProgress();
            return true;
        }

        @Override
        protected void onPostExecute(Boolean s) {
            progressBar.setVisibility(View.GONE);
            editText.setText("");

            if (s.equals(true)) {
                textmain1.setText(detectedResponse);
                textmain2.setText(sentencesResponse);
            } else {
                Toast.makeText(Main3Activity.this, "Error :(", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

android android-asynctask
1个回答
1
投票

你必须在点击按钮时获得文本。

submitBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            userInputText = editText.getText().toString();
            MyAsyncTask myAsyncTask = new MyAsyncTask();
            myAsyncTask.execute(userInputText);
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.