2017-04-12 97 views
0

我試圖動態地從遠程服務器下載圖像(動態地來沒有圖像)。爲了下載所有需要30到40秒的圖像,平均時間用戶必須等待才能看到活動。但加載所有圖像後加載活動是最糟糕的情況。我想先加載活動,然後逐個加載圖像。如何先加載活動,然後逐個加載圖像

這裏是我的代碼:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) 
{ 
    readBundle(getArguments()); 

    v = inflater.inflate(R.layout.fragment_fragment1, container, false); 


    naslovglavni = (TextView) v.findViewById(R.id.naslovglavni); 

    glavnaSlika = (ImageView) v.findViewById(R.id.glavnaSlika); 


    prednaslov = (TextView) v.findViewById(R.id.prednaslov); 
    naslov1 = (TextView) v.findViewById(R.id.naslov1); 
    podnaslov =(TextView) v.findViewById(R.id.podnaslov); 

     Ion.with(getActivity().getApplicationContext()) 

       .load(rezultat1) 

       .asString() 

       .setCallback(new FutureCallback<String>() 
       { 
        @Override 
        public void onCompleted(Exception e, String result) 
        { 
         ArrayList<String> h2=new ArrayList<String>(); 
         ArrayList<String> pocetakVesti=new ArrayList<String>(); 
         ArrayList<String> slikeZaVesti=new ArrayList<String>(); 

         String htmlString=result; 

         int startPosition1 = 0; 
         int endPosition1 = 0; 

         startPosition1=htmlString.indexOf("<h2 class=\"article-title\"")+"<h2 class=\"article-title\"".length()+1; 
         endPosition1=startPosition1; 

         while(htmlString.substring(startPosition1,endPosition1).indexOf("</h2>")<0){ 
          endPosition1++; 
         } 
         endPosition1=endPosition1-"</h2>".length(); 


         String naslovG = htmlString.substring(startPosition1,endPosition1); 

         String naslovGG=""; 
         for(int k=0;k<naslovG.length();k++){ 
          if(k+2<naslovG.length() && naslovG.substring(k,k+1).equals(" ") && naslovG.substring(k+1,k+2).equals(" ")) { 
           //todo 
          } 
          else { 
           naslovGG+=naslovG.substring(k,k+1); 
          } 

         } 

         naslovG=naslovGG; 
         naslovG=naslovG.trim(); 

         naslovG=naslovG.replace("<br /> ",""); 

         naslovglavni.setText(naslovG); 

         htmlString=htmlString.substring(endPosition1+"</h2>".length()); 

         //slika prva 

         String slikaPrva=""; 

         int startPosition2=htmlString.indexOf("<div class=\"article-photo\">"); 
         int endPosition2=startPosition2; 

         while(htmlString.substring(startPosition2,endPosition2).indexOf("</div>")<0){ 
          endPosition2++; 
         } 

         slikaPrva=htmlString.substring(startPosition2,endPosition2); 

         htmlString=htmlString.substring(endPosition2+"</div>".length()); 

         startPosition2=slikaPrva.indexOf("<img src=")+"<img src=".length()+1; 
         endPosition2=startPosition2; 

         while(endPosition2<slikaPrva.length() && slikaPrva.substring(startPosition2,endPosition2).indexOf(".jpg")<0 && slikaPrva.substring(startPosition2,endPosition2).indexOf(".jpeg")<0 && slikaPrva.substring(startPosition2,endPosition2).indexOf(".png")<0) { 
          endPosition2++; 
         } 


         if(endPosition2<slikaPrva.length()-1) { 
          slikaPrva = slikaPrva.substring(startPosition2, endPosition2); 
          Picasso.with(getActivity()).load(slikaPrva) 
            .into(glavnaSlika); 
         } else 
          Picasso.with(getActivity()).load("http://www.magazinauto.com/wp-content/uploads/2015/05/Auto-magazin_logotip-original.jpg") 
            .into(glavnaSlika); 

         //pre naslov 

         int startPosition3=htmlString.indexOf("<div class=\"calendar-time\">")+"<div class=\"calendar-time\">".length(); 
         int endPosition3=startPosition3; 

         while(htmlString.substring(startPosition3,endPosition3).indexOf("</div>")<0){ 
          endPosition3++; 
         } 
         String preNaslov= htmlString.substring(startPosition3,endPosition3-"</div>".length()); 
         prednaslov.setText(preNaslov); 

         preNaslov=preNaslov.replace("<br />",""); 
         preNaslov=preNaslov.replace("&quot;","\""); 
         preNaslov=preNaslov.replace("&#8230;","..."); 
         preNaslov=preNaslov.replace("&#038;","&"); 
         preNaslov=preNaslov.replace("&#8220;","「"); 
         preNaslov=preNaslov.replace("&#8221;","」"); 
         preNaslov=preNaslov.replace("&#8211;","–"); 
         preNaslov=preNaslov.replace("&#8217;","'"); 

         htmlString=htmlString.substring(endPosition3+"</div>".length()); 

         //naslov 

         int startPosition4=htmlString.indexOf("<div class=\"druginaslov\">"); 
         int endPosition4=startPosition4; 

         while(htmlString.substring(startPosition4,endPosition4).indexOf("</div>")<0){ 
          endPosition4++; 
         } 

         String drugiNaslov=htmlString.substring(startPosition4+"<div class=\"druginaslov\">".length(),endPosition4-"</div>".length()); 

         drugiNaslov=drugiNaslov.replace("<br /> ",""); 

         drugiNaslov=drugiNaslov.replace("<br />",""); 
         drugiNaslov=drugiNaslov.replace("&quot;","\""); 
         drugiNaslov=drugiNaslov.replace("&#8230;","..."); 
         drugiNaslov=drugiNaslov.replace("&#038;","&"); 
         drugiNaslov=drugiNaslov.replace("&#8220;","「"); 
         drugiNaslov=drugiNaslov.replace("&#8221;","」"); 
         drugiNaslov=drugiNaslov.replace("&#8211;","–"); 
         drugiNaslov=drugiNaslov.replace("&#8217;","'"); 

         naslov1.setText(drugiNaslov); 

         htmlString=htmlString.substring(endPosition4+"</div>".length()); 

         //podnaslov 

         int startPosition5=htmlString.indexOf("<p class=\"uvod\">"); 
         int endPosition5=startPosition5; 

         while(htmlString.substring(startPosition5,endPosition5).indexOf("</p>")<0){ 
          endPosition5++; 
         } 

         String podnaslovtext=htmlString.substring(startPosition5+"<p class=\"uvod\">".length(),endPosition5-"</p>".length()); 


         podnaslovtext=podnaslovtext.replace("<br />",""); 
         podnaslovtext=podnaslovtext.replace("&quot;","\""); 
         podnaslovtext=podnaslovtext.replace("&#8230;","..."); 
         podnaslovtext=podnaslovtext.replace("&#038;","&"); 
         podnaslovtext=podnaslovtext.replace("&#8220;","「"); 
         podnaslovtext=podnaslovtext.replace("&#8221;","」"); 
         podnaslovtext=podnaslovtext.replace("&#8211;","–"); 
         podnaslovtext=podnaslovtext.replace("&#8217;","'"); 

         podnaslov.setText(podnaslovtext); 

         htmlString=htmlString.substring(endPosition5+"</p>".length()); 

         String htmlStringSlike=htmlString; 
         String htmlStringTekst=htmlString; 
         String htmlStringTekstKodSlika=htmlString; 

         int startPosSlikaKodTeksta=htmlStringTekstKodSlika.indexOf("<div class=\"shortcode-content\">"); 
         int endPosSlikaKodTeksta=startPosSlikaKodTeksta+"<div class=\"shortcode-content\">".length(); 

         while(htmlStringTekstKodSlika.substring(startPosSlikaKodTeksta,endPosSlikaKodTeksta).indexOf("<!-- END .shortcode-content -->")<0){ 
          endPosSlikaKodTeksta++; 
         } 
         htmlStringTekstKodSlika=htmlStringTekstKodSlika.substring(startPosSlikaKodTeksta,endPosSlikaKodTeksta); 

         while(htmlStringTekstKodSlika.length()>0){ 

          startPosSlikaKodTeksta=htmlStringTekstKodSlika.indexOf("<p class=\"wp-caption-text\">"); 
          if(startPosSlikaKodTeksta>0){ 
           String pasusUTekstuKodSlike=null; 

           startPosSlikaKodTeksta+="<p class=\"wp-caption-text\">".length(); 
           endPosSlikaKodTeksta=startPosSlikaKodTeksta; 

           while(htmlStringTekstKodSlika.substring(startPosSlikaKodTeksta,endPosSlikaKodTeksta).indexOf("</p>")<0){ 
            endPosSlikaKodTeksta++; 
           } 

           pasusUTekstuKodSlike = htmlStringTekstKodSlika.substring(startPosSlikaKodTeksta, endPosSlikaKodTeksta); //e sad ja... 

           htmlStringTekstKodSlika=htmlStringTekstKodSlika.substring(endPosSlikaKodTeksta); 


           pasusUTekstuKodSlike=pasusUTekstuKodSlike.replace("<strong>",""); 
           pasusUTekstuKodSlike=pasusUTekstuKodSlike.replace("</strong>",""); 

           int poc=pasusUTekstuKodSlike.indexOf("<a href="); 
           while(poc>0) { 
            int kraj = poc; 
            while (pasusUTekstuKodSlike.substring(poc, kraj).indexOf(">") < 0) { 
             kraj++; 
            } 
            String link = pasusUTekstuKodSlike.substring(poc, kraj); 
            pasusUTekstuKodSlike = pasusUTekstuKodSlike.replace(link, ""); 

            poc = pasusUTekstuKodSlike.indexOf("<a href="); 
           } 

           pasusUTekstuKodSlike=pasusUTekstuKodSlike.replace("&#8220;","\""); 
           pasusUTekstuKodSlike=pasusUTekstuKodSlike.replace("&#8221;","\""); 
           pasusUTekstuKodSlike=pasusUTekstuKodSlike.replace("</p>",""); 
           pasusUTekstuKodSlike=pasusUTekstuKodSlike.replace("</a>",""); 
           pasusUTekstuKodSlike=pasusUTekstuKodSlike.replace("<br />",""); 

           listaTekstaKodSlika.add(pasusUTekstuKodSlike); 

          } 
          else break; 

         } 

         int startPositionTekst=htmlStringTekst.indexOf("<div class=\"shortcode-content\">"); 
         int endPositionTekst=startPositionTekst+"<div class=\"shortcode-content\">".length(); 

         while(htmlStringTekst.substring(startPositionTekst,endPositionTekst).indexOf("<!-- END .shortcode-content -->")<0){ 
          endPositionTekst++; 
         } 

         htmlStringTekst=htmlStringTekst.substring(startPositionTekst,endPositionTekst); 

         while(htmlStringTekst.length()>0){ 


          startPositionTekst=htmlStringTekst.indexOf("<p>"); 
          if(startPositionTekst>0){ 
           String pasusUTekstu=null; 

           startPositionTekst+="<p>".length(); 
           endPositionTekst=startPositionTekst; 

           while(htmlStringTekst.substring(startPositionTekst,endPositionTekst).indexOf("</p>")<0){ 
            endPositionTekst++; 
           } 

           pasusUTekstu = htmlStringTekst.substring(startPositionTekst, endPositionTekst); //e sad ja... 

           htmlStringTekst=htmlStringTekst.substring(endPositionTekst); 


           pasusUTekstu=pasusUTekstu.replace("<strong>",""); 
           pasusUTekstu=pasusUTekstu.replace("</strong>",""); 

           int poc=pasusUTekstu.indexOf("<a href="); 
           while(poc>0) { 
            int kraj = poc; 
            while (pasusUTekstu.substring(poc, kraj).indexOf(">") < 0) { 
             kraj++; 
            } 
            String link = pasusUTekstu.substring(poc, kraj); 
            pasusUTekstu = pasusUTekstu.replace(link, ""); 

            poc = pasusUTekstu.indexOf("<a href="); 
           } 

           pasusUTekstu=pasusUTekstu.replace("&#8220;","\""); 
           pasusUTekstu=pasusUTekstu.replace("&#8221;","\""); 
           pasusUTekstu=pasusUTekstu.replace("</p>",""); 
           pasusUTekstu=pasusUTekstu.replace("</a>",""); 
           pasusUTekstu=pasusUTekstu.replace("<br />",""); 

           if(pasusUTekstu.indexOf("img")<0) listaTeksta.add(pasusUTekstu); 

          } 
          else break; 

         } 

         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); 

           listaSlika.add(slikaUTekstu); 

          } 
          else break; 

         } 

         for(int i=0;i<listaSlika.size() ;i++) { 

          if(i<listaTeksta.size()) { 
           textTv[i] = (TextView) v.findViewById(nizTekstaID[i]); 
           textTv[i].setText(listaTeksta.get(i)); 
          } 

          slikaTv[i] = (ImageView) v.findViewById(nizSlikaID[i]); 

          Picasso.with(getActivity()).load(listaSlika.get(i)); // programski slika u dodati layout 


          v.findViewById(mLayoutIdArray[i]).setVisibility(View.VISIBLE); 

         } 



        } 

    }); 

    LinearLayout layouttekstglavnevesti1 = (LinearLayout) v.findViewById(R.id.layouttekstglavnevesti1); 

    layouttekstglavnevesti1.setVisibility(View.VISIBLE); 
    // layouttekstglavnevesti1.setBackgroundColor(Color.BLACK); 
    // layouttekstglavnevesti1.getBackground().setAlpha(120); 

    return v; 

} 
+0

如果我理解了這個問題,圖像不會加載。嘗試'Picasso.with(getActivity()).load(listaSlika.get(i))。(slikaTv [i])' –

+0

不,他們正在加載。但是當活動創建時凍結,直到所有圖片加載。我想要開始的活動,比逐個加載圖片 – smiljka

+0

您在活動的生命週期中何處調用加載循環? –

回答

0

你需要異步解析HTML。現在你正在用UI線程調用的回調中進行解析。

圖像加載非常快,因爲我認爲你測試應用程序在無線網絡。

+0

你知道也許有什麼辦法解析不是asyncTask的線程中的HTML嗎? – smiljka

+0

例如使用SingleThreadPool,或者使用rxjava。或者只是使用Java線程 –