2016-06-21 5 views
0

Android dev에 처음 등록됨. 응용 프로그램은 정말 간단한 하나 AsyncTask 및 조각을 사용하여 온라인에서 이미지를로드 버튼을 클릭하지만, 여전히 null 이미지 (이미지가 확실히 온라인입니다)로 기본 가져 오지 않을 수 없습니다. 매니페스트에 인터넷 권한이 설정되어 있으며 fragment_main.xml에 버튼과 ImageView가 선언되었습니다.AsyncTask를 사용하여 웹에서 이미지로드

제가 누락 된 부분에 대한 힌트가 있습니까? 안드로이드 스튜디오,

MainActivity.java

import android.app.ProgressDialog; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

import java.net.*; 
import java.io.InputStream; 
import android.graphics.*; 
import android.widget.*; 


public class MainActivity extends AppCompatActivity { 

Button button; 
ImageView img; 
Bitmap bitmap; 
ProgressDialog progress; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    button = (Button) findViewById(R.id.button); 
    img = (ImageView) findViewById(R.id.img); 
    button.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 
      new getImage().execute("https://media-cdn.tripadvisor.com/media/photo-s/03/9b/2d/f2/new-york-city.jpg"); 

     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


private class getImage extends AsyncTask<String, String, Bitmap> { 

    @Override 
    protected Bitmap doInBackground(String... args) { 

     try { 
      bitmap = BitmapFactory.decodeStream((InputStream) new URL(args[0]).getContent()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return bitmap; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     progress = new ProgressDialog(MainActivity.this); 
     progress.setMessage("Loading Image ...."); 
     progress.show(); 
    } 


    @Override 
    protected void onPostExecute(Bitmap image) { 
     super.onPostExecute(image); 

     if(image != null){ 
      img.setImageBitmap(bitmap); 
      progress.dismiss(); 
     } else{ 
      progress.dismiss(); 
     } 
    } 

} 
} 

답변

0

하시기 바랍니다 ... 어떤 구문 오류에 포착되지 않은 비동기 작업과 그것을하지 않는다, 당신을 도울 수있는 도서관이 많이 있습니다.

Picasso은 구현하기가 매우 쉽고 비동기 적으로 작동하는 훌륭한 이미지로드 라이브러리입니다. 당신의 애플 리케이션에

compile 'com.squareup.picasso:picasso:2.5.2' 

파일을 build.gradle :

당신이해야 할 모든이 의존성을 추가 할 수 있습니다.

그 후, 당신의 활동이 추가

Picasso.with(this).load("https://media-cdn.tripadvisor.com/media/photo-s/03/9b/2d/f2/new-york-city.jpg").into(img); 

짜잔, 당신은 완료!

+0

이 문제에 대한 도움을 찾기 위해 Picasso가 더 나은 리소스라는 것을 알았습니다. 불행히도 AsyncTask를 학교에서 일하도록해야했습니다. – bluebrooklynbrim

+0

고맙습니다. – bluebrooklynbrim

+0

그 경우, [이것 좀보세요] (http://stacktips.com/tutorials/android/download-image-using-asynctask-in-android). – Marijan

관련 문제