2011-09-06 7 views
0
ImageView img; 
TextView tv; 
Parser p= new Parser(); 

@Override 
public void onCreate(Bundle savedInstanceState) {   
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv = (TextView) findViewById(R.id.txt); 
    img = (ImageView) findViewById(R.id.cover); 


    new AsyncTask<Void, Double, Void>() { 

     @Override 
     protected Void doInBackground(Void... params) { 

      while (true) { 
       publishProgress(Math.random()); 
       SystemClock.sleep(3000); 

      } 
     } 

     @Override 
     protected void onProgressUpdate(Double... values) { 


      p.myHandler(); 
      img.setImageBitmap(p.bitmap); 
      tv.setText("Artist : " + p.artist + "\n" + 
         "Album : " + p.album + "\n" + 
         "Song : " + p.title + "\n"); 
     } 
    }.execute(); 
} 

또한이미지보기 문제

p.bitmap = BitmapFactory.decodeStream((InputStream)new URL(image).getContent()); 

하지만 이미지가 항상 표시되지 않습니다. 이미지가 나타나고 무작위로 사라져서 제발 도와 주실 수 있습니까?

+0

이 유 스택 추적에 오류를받을 수 있나요

이 클래스는 문제를 해결? – blessenm

+0

당신은 적절한 비트 맵을 가지고 있습니다 ????? System.out.println ("Bitmap ::"+ p.bitmap);으로 확인하십시오. –

+0

아마도 한 줄에 decodeStream 메서드 내에서 모든 로직을 수행하면 안됩니다. 당신이 가지고있는 방식으로, 당신은 현재 가지고있는 어떤 문제도 디버그 할 수 없을뿐만 아니라 실패를 처리 할 방법이 없습니다. 원격 URL을 다운로드 할 때 논리의 일부인 경우 거의 항상 실패 할 수 있습니다. 오류를 처리하고 선택적으로 로깅하고 다시 시도하는 등의 코드를 항상 가지고있는 것이 좋습니다. – Rich

답변

0

this link에 따르면 BitmapFactory.decodeStream의 이전 버전에는 버그가 있습니다. 적어도 안드로이드 2.1 SDK에 존재합니다.

class FlushedInputStream extends FilterInputStream { 
    public FlushedInputStream(InputStream inputStream) { 
     super(inputStream); 
    } 

    @Override 
    public long skip(long n) throws IOException { 
     long totalBytesSkipped = 0L; 
     while (totalBytesSkipped < n) { 
      long bytesSkipped = in.skip(n - totalBytesSkipped); 
      if (bytesSkipped == 0L) { 
        int ibyte = read(); 
        if (ibyte < 0) { 
         break; // we reached EOF 
        } else { 
         bytesSkipped = 1; // we read one byte 
        } 
      } 
      totalBytesSkipped += bytesSkipped; 
     } 
     return totalBytesSkipped; 
    } 
} 

그리고 이미지가 너무 다운로드해야합니다 :

//I'm not sure whether this line works, but just in case I use another approach 
//InputStream is = (InputStream)new URL(image).getContent() 
DefaultHttpClient client = new DefaultHttpClient(); 
HttpGet request = new HttpGet(imageUrl); 
HttpResponse response = client.execute(request); 
InputStream is = response.getEntity().getContent(); 
//Use another stream 
FlushedInputStream fis = new FlushedInputStream(is); 
bmp = BitmapFactory.decodeStream(fis); 
+0

잘 작동합니다. – aamethk