2014-10-17 6 views
0

이 응용 프로그램은 썸네일, 제목, 선택된 재생 목록에있는 각 비디오의 기간을 표시해야하지만, 썸네일이 응용 프로그램이 작동을 흰색 남아 있지만, 그것은 재생 목록의 동영상의 썸네일을 표시하지 않습니다youtube에서 미리보기 이미지를 표시 할 수 없습니까?

내가 어떻게 할 수 그래? 너는 어떤 해결책이 있니? 당신의 JSON 개체를 반환해야합니다

Picasso.withContext(this).load(thumbnailUrl).into(myImageView); 

이 작업을 수행하려면 :

은과 같이 이미지 URL을 설정하려면 코드

public class MainActivity extends Activity { 

ImageView mainThumb; 
TextView mainTitle; 
TextView mainTime; 
LinearLayout videos; 
ArrayList<String> links; 

/** Called when the activity is first created. */ 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.videos); 

    new ParseVideoDataTask().execute(); 
    mainThumb = (ImageView) findViewById(R.id.mainThumb); 
    mainTitle = (TextView) findViewById(R.id.mainTitle); 
    mainTime = (TextView) findViewById(R.id.mainTime); 
    videos = (LinearLayout) findViewById(R.id.videos); 

} 

private class ParseVideoDataTask extends AsyncTask<String, String, String> { 
    int count = 0; 

    @Override 
    protected String doInBackground(String... params) { 
     URL jsonURL; 
     URLConnection jc; 
     links = new ArrayList<String>(); 
     try { 
      jsonURL = new URL("http://gdata.youtube.com/feeds/api/playlists/" + 
        "PL-7t9DoIELCRF7F7bZvvBwO1yvHRFsJiu" + 
       "?v=2&alt=jsonc"); 
      //PL_VGbflD64WSR1MBcpWlNwsY0lRNVuJ3r 
      jc = jsonURL.openConnection(); 
      InputStream is = jc.getInputStream(); 
      String jsonTxt = IOUtils.toString(is); 
      JSONObject jj = new JSONObject(jsonTxt); 
      JSONObject jdata = jj.getJSONObject("data"); 
      JSONArray aitems = jdata.getJSONArray("items"); 
      for (int i=0;i<aitems.length();i++) { 
       JSONObject item = aitems.getJSONObject(i); 
       JSONObject video = item.getJSONObject("video"); 
       String title = video.getString("title"); 
       JSONObject player = video.getJSONObject("player"); 
       String link = player.getString("default"); 
       String length = video.getString("duration"); 
       JSONObject thumbnail = video.getJSONObject("thumbnail"); 
       String thumbnailUrl = thumbnail.getString("hqDefault"); 
       String[] deets = new String[4]; 
       deets[0] = title; 
       deets[1] = thumbnailUrl; 
       deets[2] = length; 
       links.add(link); 
       publishProgress(deets); 
      } 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     }  
     return null; 
    }  

    @Override 
    protected void onProgressUpdate(final String... deets) { 
     count++; 
     if (count == 1) { 
      MainActivity.setImageFromUrl(deets[1], mainThumb, MainActivity.this); 
      mainTitle.setText(deets[0]); 
      mainTime.setText(formatLength(deets[2])); 
      mainThumb.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(links.get(1))); 
        startActivity(i); 
       } 
      }); 
     } else { 
      LayoutInflater layoutInflater = (LayoutInflater)MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View video = layoutInflater.inflate(R.layout.video, null); 
      ImageView thumb = (ImageView) video.findViewById(R.id.thumb); 
      TextView title = (TextView) video.findViewById(R.id.title); 
      TextView time = (TextView) video.findViewById(R.id.time); 
      MainActivity.setImageFromUrl(deets[1], thumb, MainActivity.this); 
      title.setText(deets[0]); 
      time.setText(formatLength(deets[2])); 
      video.setPadding(20, 20, 20, 20); 
      videos.addView(video); 
      video.setId(count-1); 
      video.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(links.get(v.getId()))); 
        startActivity(i); 
       } 
      }); 
     } 
    } 
} 

private CharSequence formatLength(String secs) { 
    int secsIn = Integer.parseInt(secs); 
    int hours = secsIn/3600, 
      remainder = secsIn % 3600, 
      minutes = remainder/60, 
      seconds = remainder % 60; 

      return ((minutes < 10 ? "0" : "") + minutes 
      + ":" + (seconds< 10 ? "0" : "") + seconds); 
} 



public static void setImageFromUrl(String string, ImageView mainThumb2, 
     MainActivity mainActivity) { 

} 



@Override 
public void onDestroy() { 
    super.onDestroy(); 
    for (int i=0;i<videos.getChildCount();i++) { 
     View v = videos.getChildAt(i); 
     if (v instanceof ImageView) { 
      ImageView iv = (ImageView) v;   
      ((BitmapDrawable)iv.getDrawable()).getBitmap().recycle(); 
     } 
    } 
} 

}

+0

아직 답을 얻지 못했지만, Retrofit http://square.github.io/retrofit/와 같은 Http 라이브러리를 사용하는 것이 좋습니다. Http를 다루는 것이 훨씬 쉽습니다. 종점. :) –

답변

0

사용 Picasso입니다 doInBackground 메서드를 사용하거나 (위의 주석에서 언급 한) Retrofit과 같은 것을 사용하여 멋진 POJO를 가져 와서 반환 할 수 있습니다. 그런 다음 postExecute에서 JSON (또는 POJO)의 축소판 URL을 사용하고 위의 Picasso를 사용하여 설정할 수 있습니다. Picasso는 이미지를 다운로드하고 캐싱하여 이미지보기에로드합니다.

+0

어디에서이 코드를 삽입합니까? thanks – john

+0

방금 ​​내 의견을 더 자세히 업데이트했습니다. –

+0

AsyncTask에서 onPostExecute를 구현해야합니다. doInBackground에서 null을 반환하는 대신 JSON 객체 (또는 Retrofit/etc를 사용하는 경우 POJO)를 반환합니다. 그런 다음 onPostExecute에서 Picasso를 통해 이미지를로드 할 수 있습니다. –