我是來自doInBackground中的URL的parisng數據,並將值設置爲onPostExecute中的UI線程。所以,我的數組ArrayList的是全局變量:Asyncatsk doInBackground返回空ArrayList <String>到onPostExecute
ArrayList<String> arraylist=new ArrayList<String>();
現在,我在doInBackground解析HTML和增加值全球ArrayList中,所以當我返回的ArrayList到onPostExecute的ArrayList()是空
這裏是我的代碼:
ArrayList<String> arraylist=new ArrayList<String>(); // global
new readtextfile21().execute(rezultat1);
public class readtextfile21 extends AsyncTask<String, ArrayList<String>, ArrayList<String>> {
@Override
protected ArrayList<String> doInBackground(String... params)
{
Ion.with(getActivity().getApplicationContext())
.load(rezultat1)
.asString()
.setCallback(new FutureCallback<String>() {
@Override
public void onCompleted(Exception e, String result) {
String htmlStringSlike = result.substring(result.indexOf("<!-- BEGIN .shortcode-content -->"), result.length());
int startPositionSlika=htmlStringSlike.indexOf("<div class=\"shortcode-content\">");
int endPositionSlika=startPositionSlika+"<div class=\"shortcode-content\">".length();
while (htmlStringSlike.substring(startPositionSlika, endPositionSlika).indexOf("<!-- END .shortcode-content -->") < 0) {
endPositionSlika++;
}
htmlStringSlike=htmlStringSlike.substring(startPositionSlika,endPositionSlika);
while(htmlStringSlike.length()>0){
startPositionSlika = htmlStringSlike.indexOf("src=");
if(startPositionSlika>0) {
String slikaUTekstu=null;
startPositionSlika+= "src=".length() + 1;
endPositionSlika = startPositionSlika;
while (htmlStringSlike.substring(startPositionSlika, endPositionSlika).indexOf(".jpg") < 0 && htmlStringSlike.substring(startPositionSlika, endPositionSlika).indexOf(".jpeg") < 0 && htmlStringSlike.substring(startPositionSlika, endPositionSlika).indexOf(".png") < 0) {
endPositionSlika++;
}
slikaUTekstu = htmlStringSlike.substring(startPositionSlika, endPositionSlika);
htmlStringSlike=htmlStringSlike.substring(endPositionSlika);
arraylist.add(slikaUTekstu);// when i log values are here
}
else break;
}
}
});
return arraylist;
}
@Override
protected void onPostExecute(ArrayList<String> result) {
System.out.println("u onpost" + result);
for(int i=0;i<result.size() ;i++){ // result size here is 0???
slikaTv[i] = (ImageView) v.findViewById(nizSlikaID[i]);
Picasso.with(getActivity()).load(result.get(i)) // programski slika u dodati layout
.into(slikaTv[i]);
v.findViewById(mLayoutIdArray[i]).setVisibility(View.VISIBLE);
}
}
protected void onProgressUpdate() {
}
protected void onPreExecute()
{
}
}
由於您在添加到doInBrackground的回調中,但是您立即在方法結束時返回ArrayList(並且它仍然爲空)。要使代碼正常工作,您需要將'Ion.with ...'部分轉換爲同步方法。我檢查了你正在使用的庫文檔,並且你需要使用'get()'而不是'setCallback()'來使用同步請求。閱讀[這裏](https://github.com/koush/ion#blocking-on-requests) –
MatPag
@MatPag你能告訴我如何transofrm Ion.with ...請嗎?如何使用get()而不是setCallback() – smiljka