2015-01-18 3 views
0

서비스와 함께 인터넷에서 이미지를 다운로드합니다. 다운로드가 완료되면 텍스트 뷰가 변경됩니다. 내 장치에서 이것을 시도하고 작동합니다.서비스와 함께 인터넷에서 이미지를 다운로드합니다. 어떻게 보여줄 수 있습니까?

이제 레이아웃에서 이미지 뷰를 다운로드 한 이미지로 변경하고 싶습니다.

ServiceFile 자바

public class ServiceFile extends IntentService { 
    private int result = Activity.RESULT_CANCELED; 
    public static final String URL = "urlpath"; 
    public static final String FILENAME = "filename"; 
    public static final String FILEPATH = "filepath"; 
    public static final String RESULT = "result"; 
    public static final String NOTIFICATION = "be.ehb.arnojansens.fragmentexampleii"; 

    public ServiceFile() { 
     super("ServiceFile"); 
    } 

    // will be called asynchronously by Android 
    @Override 
    protected void onHandleIntent(Intent intent) { 
     String urlPath = intent.getStringExtra(URL); 
     String fileName = intent.getStringExtra(FILENAME); 
     File output = new File(Environment.getExternalStorageDirectory(), 
       fileName); 
     if (output.exists()) { 
      output.delete(); 
     } 

     InputStream stream = null; 
     FileOutputStream fos = null; 
     try { 

      java.net.URL url = new URL(urlPath); 
      stream = url.openConnection().getInputStream(); 
      InputStreamReader reader = new InputStreamReader(stream); 
      fos = new FileOutputStream(output.getPath()); 
      int next = -1; 
      while ((next = reader.read()) != -1) { 
       fos.write(next); 
      } 
      // successfully finished 
      result = Activity.RESULT_OK; 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (stream != null) { 
       try { 
        stream.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
      if (fos != null) { 
       try { 
        fos.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     publishResults(output.getAbsolutePath(), result); 
    } 

    private void publishResults(String outputPath, int result) { 
     Intent intent = new Intent(NOTIFICATION); 
     intent.putExtra(FILEPATH, outputPath); 
     intent.putExtra(RESULT, result); 
     sendBroadcast(intent); 
    } 
} 

이 내가 의도 당 정보를 전달하는 Picasso 또는 Universal Image Loader 이상을 사용하는 내 텍스트 뷰와 미래의 이미지 뷰

private TextView textView; 
    private ImageView imageView; 
    private BroadcastReceiver receiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Bundle bundle = intent.getExtras(); 
      if (bundle != null) { 
       String string = bundle.getString(ServiceFile.FILEPATH); 
       int resultCode = bundle.getInt(ServiceFile.RESULT); 
       if (resultCode == RESULT_OK) { 
        Toast.makeText(MainActivity.this, 
          "Download complete. Download URI: " + string, 
          Toast.LENGTH_LONG).show(); 
        textView.setText("Download done"); 
        // here i shoud load my image i downloaded with my service 
       } else { 
        Toast.makeText(MainActivity.this, "Download failed", 
          Toast.LENGTH_LONG).show(); 
        textView.setText("Download failed"); 
       } 
      } 
     } 
    }; 

    public void service (View view) { 

     Intent intent = new Intent(this, ServiceFile.class); 
     // add infos for the service which file to download and where to store 
     intent.putExtra(ServiceFile.FILENAME, "index.html"); 
     intent.putExtra(ServiceFile.URL, 
       "http://en.wikipedia.org/wiki/Star_Wars#mediaviewer/File:Star_Wars_Logo.svg"); 
     startService(intent); 
     textView.setText("Service started"); 


    } 
+1

에 대한 EventBus와 우려 누구에게 해당 파일의 의도에 의해 열린 우리당을 보낼 수 있습니까? –

+0

내 과제는 이렇게되어야합니다. – Pixelsquare

답변

0

더 나은이 내 주요 활동이다.

하지 않으면 서비스가 읽을 수있는 폴더에 이미지를 작성해야하고 당신이 그것을 예를 왜 피카소 lib 디렉토리를 사용

관련 문제