我正在处理显示歌曲歌词的应用程序。我有一个错误:方法getText()必须从UI线程调用。我正在寻找答案,但没有答案帮助解决了这个问题。Android Studio错误:必须从UI调用方法getText()线程
public class HomeActivity extends AppCompatActivity {
private EditText wykonawca;
private EditText tytul;
private Button pokazTekst;
private TextView tekst;
//String url = "http://www.tekstowo.pl/piosenka,";
String title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
FindViews();
tekst.setMovementMethod(new ScrollingMovementMethod()); // mozliwosc scrolowania tekstu
pokazTekst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new SongText().execute();
}
});
}
public class SongText extends AsyncTask{
String url = "http://www.tekstowo.pl/piosenka,";
String author;
String song_name;
@Override
protected Void doInBackground(Void... params) {
try {
// here is error
author = wykonawca.getText().toString();
song_name = tytul.getText().toString();
url = url + author + "," + song_name + ".html";
Document doc = Jsoup.connect(url).get();
title = doc.select("div[class=song-text").text();
}
catch (IOException e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
tekst.setText(title);
}
}
private void FindViews(){
// Edit text
wykonawca = (EditText) findViewById(R.id.wykonawca);
tytul = (EditText) findViewById(R.id.tytul);
// Buttons
pokazTekst = (Button) findViewById(R.id.pokazTekst);
// TextViews
tekst = (TextView) findViewById(R.id.tekst);
}
}
+0
你从一个异步线程中调用的getText()。它应该从UI线程中调用。你可以做的是在调用asynctask之前从文本字段获取值,并从字符串变量中读取值或将它们传递给asynctask构造函数。 –