0

私のプログラムは次のようなものです。データAPIの応答を2番目のアクティビティであるListActivityに渡しました。そして、リストマッピングを行っているときに、すべてのサムネイルを1つずつダウンロードしました。動作しましたが、サムネイルをダウンロードしているときにUIがフリーズしました。AsycTaskを使用して実行しようとしましたが、機能しませんでした。

これが私のコードです:最初のアクティビティ

      public void Search(View view){
      String searchText;
      searchText = searchTarget.getText().toString();
      searchText= searchText.replaceAll(space,searchOr);
      if(searchText==null||searchText==""){
          Toast.makeText(Login.this, "Please enter at least one keyword", Toast.LENGTH_LONG).show();
          }
      else{
          try {
              //AsyncTask code here
              String SearchLink=searchTextStart+searchText+searchTextMid+page+searchTextEnd;
              new DownloadTask().execute(SearchLink);
              Log.v("Search checking ", SearchLink);
              } catch(Exception ex) {
                  //your timeout code
                  Toast.makeText(this, "No drivers found, network problem!", Toast.LENGTH_LONG).show();
                  }
          this.pd = ProgressDialog.show(this, "Working..", "Searching...", true, false);
          } 
      }

2番目のアクティビティ

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle = this.getIntent().getExtras(); 
    arrayLength= bundle.getInt("indexToList");
    videoInfo = bundle.getStringArray("videoInfo");

    mData=getData();

    MyAdapter adapter = new MyAdapter(this);
    setListAdapter(adapter);
    }
private List<Map<String, Object>> getData() {

    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

    Log.v("In videoInfo List","length"+arrayLength);       
    Map<String, Object> map;

    for(int j=0, i=0 ; j<arrayLength; j++, i++){
        map = new HashMap<String, Object>();
        map.put("uploaded", videoInfo[j]);
        j++;
        map.put("category", videoInfo[j]);
        j++;
        map.put("title", videoInfo[j]);
        j++;
        map.put("description", videoInfo[j]);
        j++;

        try {
            Log.i("Check bitmap","before");
            //new DownloadTask().execute(videoInfo[j]);
            //VideoList.this.pd = ProgressDialog.show(VideoList.this, "Working..", "Searching...", true, false);
            Log.i("Check bitmap","after"+videoInfo[j]);
            Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(videoInfo[j]).getContent());
            map.put("thumbnail", bitmap);           
            }
        catch (Exception e){
              Toast.makeText(VideoList.this, "Network problem!", Toast.LENGTH_LONG).show();
        }


        //map.put("thumbnail",thumbnail[i]);            
        j++;            
        map.put("youtube_link", videoInfo[j]);   
        j++;
        map.put("rtsp", videoInfo[j]); 
        Log.v("In videoInfo List","rtsp: "+videoInfo[j]);  
        j++;

        float a = Float.parseFloat(videoInfo[j]);
        int b=(int)a;
        int sec = b % 60;
        int min = b/60;         
        String duration;
        if (sec<10)
        { duration = min+" : 0"+sec;}
        else
        {duration = min+" : "+sec;}
        videoInfo[j] = duration;
        map.put("duration", videoInfo[j]);   
        Log.v("In videoInfo List","duration: "+videoInfo[j]);       
        list.add(map);

        }
    Log.v("In videoInfo List","list: "+list.size());       

    return list;
}

私の英語で申し訳ありませんが、私が書いたものがわからない場合は、私に知らせてください。誰か助けてもらえますか?

4

1 に答える 1

0

問題が解決しました!サムネイルのダウンロードが完了する前に、実際にListView.setAdapter(adapter)を呼び出しました。だから私はListView.setAdapter(adapter)をonPostExecute()に入れて、それはうまく機能します

于 2012-09-04T00:08:33.060 に答える