Java AsyncTask/或线程仅在滚动时使列表视图行填充值
我的应用程序由一个自定义列表视图组成,每行包含文本 My MainActivityJava AsyncTask/或线程仅在滚动时使列表视图行填充值,java,android,multithreading,android-asynctask,Java,Android,Multithreading,Android Asynctask,我的应用程序由一个自定义列表视图组成,每行包含文本 My MainActivity将翻译后的字符串放入名为feedData的HashMap,该HashMap由CustomListView类检索,其中为每行设置了TextView 关于我的自定义列表视图的所有内容都可以完美执行。我得到这个错误是因为我正在实现GoogleAPI转换,这迫使我使用AsyncTask或线程。值填充到每一行中,但仅当我上下滚动时 main活动 TranslateString(feedText, feedData);
将翻译后的字符串放入名为feedData
的HashMap,该HashMap由CustomListView类
检索,其中为每行设置了TextView
关于我的自定义列表视图的所有内容都可以完美执行。我得到这个错误是因为我正在实现GoogleAPI转换,这迫使我使用AsyncTask或线程。值填充到每一行中,但仅当我上下滚动时
main活动
TranslateString(feedText, feedData);
arrayFeedList.add(feedData);
翻译字符串方法:
public void TranslateString(final String mText, final HashMap<String, String> mList) {
AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... voids) {
try {
Translate translate = TranslateOptions.builder().setApiKey("AIzaSyB7cCDBbeoZ2tYTH-Ynv25OaPraLmTG7Hw").build().getService();
Translation translation =
translate.translate(
mText,
TranslateOption.sourceLanguage("tr"),
TranslateOption.targetLanguage("en"));
returnedString = translation.getTranslatedText();
check = 1;
} catch (Exception e) {
check = 2;
}
return null;
}
@Override
protected void onPostExecute(Void result) {
if(check == 1){
mList.put("feed", returnedString);
}
else if(check == 2){
mList.put("feed", mText + " " + getContext().getString(R.string.translationfailed) + " in catch");
}
}
};
asyncTask.execute();
}
}
public void TranslateString(最终字符串多行文字,最终HashMap mList){
AsyncTask AsyncTask=新建AsyncTask(){
@凌驾
受保护的空位背景(空位…空位){
试一试{
Translate Translate=TranslateOptions.builder().setApiKey(“AIzaSyB7cCDBbeoZ2tYTH-Ynv25OaPraLmTG7Hw”).build().getService();
翻译=
翻译,翻译(
mText,
TranslateOption.sourceLanguage(“tr”),
目标语言(英语);
returnedString=translation.getTranslatedText();
检查=1;
}捕获(例外e){
检查=2;
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
如果(检查==1){
mList.put(“馈送”,返回字符串);
}
否则如果(检查==2){
mList.put(“feed”,mText+“”+getContext().getString(R.string.translationfailed)+“in catch”);
}
}
};
asyncTask.execute();
}
}
在我的MainActivity中执行此操作修复了我的问题:(在完全删除AsyncTask方法后)
if (android.os.Build.VERSION.SDK_INT > 9)
{
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}