2016-06-16 5 views
1

parse.com에서 이미지를 다운로드하고 AppCompatActivity를 확장하는 활동의 이미지보기에 표시하려고합니다. parse.com에서 이미지 파일 가져 오기 및 이미지보기에 표시

나는 많은 검색 중 하나에서이 코드를 가지고 :
ParseImageView mImage = (ParseImageView) findViewById(R.id.image); 

    ParseObject object = new ParseObject("Appetizers"); // class name 
    ParseFile postImage = object.getParseFile("imageFiles"); // column name 
    String imageUrl = postImage.getUrl() ;//live url 
    Uri imageUri = Uri.parse(imageUrl); 

    Picasso.with(getBaseContext()).load(imageUri.toString()).into(mImage); 

My parse class

어떤 도움

주시면 감사하겠습니다.

파일 형식 : jpg

+0

미안하지 대답,하지만 (내가 제대로 이해한다면) 나는 몇 일 전 당신 같은 문제에 직면하고 발리 슛으로 쉽게 풀렸다. – statosdotcom

+0

죄송합니다. 발리 란 무엇입니까? – LizG

+0

무엇이 문제입니까? –

답변

0

나는 모든 곳에서 로그를 디버깅하고 설정하여 알아 냈습니다 ...

ParseObject po = mAppetizers.get(position); // get position 
String ID = po.getObjectId().toString(); 

Intent intent = new Intent(Appetizer.this, AppetizerRecipe.class); 

intent.putExtra("ID", ID); 
startActivity(intent); 

수신기의 클래스에서 :

보내는 클래스에서

final ParseImageView mImage = (ParseImageView) findViewById(R.id.image); 
String ID = getIntent().getStringExtra("ID"); 

     ParseQuery<ParseObject> getimage = new ParseQuery<>("Appetizers"); 
    getimage.addAscendingOrder("appetizer"); 
    getimage.whereEqualTo("ID", ID); 
     Log.d("AppetizerRecipe2", "object: " + ID); 
    getimage.getInBackground(ID, new GetCallback<ParseObject>() { 
     @Override 
     public void done(ParseObject object, ParseException e) { 
      if (e == null) { 
       Log.v("what is e?", "e = " + e); 
       // success 
       final ParseFile fileObject = (ParseFile)object.get("imageFiles"); 
       fileObject.getDataInBackground(new GetDataCallback() { 
        public void done(byte[] data, ParseException e) { 
         if (e == null) { 
          Log.d("test", "We've got data in data."); 
          // use data for something 
          Log.d("test", "Get your image..." + fileObject.getUrl()); 
        Picasso.with(getBaseContext()).load(fileObject.getUrl()).placeholder 
          (R.drawable.ic_launcher).into(mImage); 

         } else { 
          Log.d("test", "There was a problem downloading the data."); 
         } 
        } 
       }); 

      } else { 
       // fail 
       Log.d("test", "Error Message..." + e.getMessage()); 
      } 
     } 
    }); 
0

여기 내 해결책이 있습니다. 내 활동에 AppCompatActivity을 확장,이 이미지 뷰 내에서 이미지를 다운로드 할 수있는 코드 :

ImageLoader.ImageCache imageCache = new BitmapLruCache(); 
    ImageLoader imageLoader = new ImageLoader(Volley.newRequestQueue(getApplicationContext()), imageCache); 
    NetworkImageView headshot = (NetworkImageView) findViewById(R.id.speaker_headshot); 
    headshot.setImageResource(R.drawable.loading); 
    headshot.setImageUrl("http://www.anydomain.com/anyimage.jpg", imageLoader); 

당신은 당신의 프로젝트에 addicional 클래스가 필요합니다시피, BitmapLruCache.java라는 이름의 파일. 여기의 전체 내용은 다음과 같습니다이 모두 들어 :

  <com.android.volley.toolbox.NetworkImageView 
      android:id="@+id/speaker_headshot" 
      android:layout_width="match_parent" 
      android:layout_height="150dp" 
      android:scaleType="centerCrop"/> 

편집 :이 작업을 위해

public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache { 

public BitmapLruCache() { this(getDefaultLruCacheSize()); } 

public BitmapLruCache(int sizeInKiloBytes) { super(sizeInKiloBytes); } 

@Override 
protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight()/1024; } 

@Override 
public Bitmap getBitmap(String url) { return get(url); } 

@Override 
public void putBitmap(String url, Bitmap bitmap) { put(url, bitmap); } 

public static int getDefaultLruCacheSize() { 
    final int maxMemory = (int) (Runtime.getRuntime().maxMemory()/1024); 
    final int cacheSize = maxMemory/8; 
    return cacheSize; 
} 
} 

마지막으로, 당신은 당신의 레이아웃 내부 설정에 XML를 특별한 이미지 뷰가 가져 오기 작업해야합니다 :

1) 발리 라이브러리. Android Studio : 메뉴 파일/프로젝트 구조/모듈 -app/탭 종속성에서이 작업을 수행하십시오. 여기에서 라이브러리 종속성을 추가 (+ 기호)하여 com.android.volley : volley : 1.0.0을 찾거나 검색합니다. 그게 전부 야. 이미 "종속"섹션이 있다면 그냥 내부의 줄을 포함

dependencies { 
compile 'com.android.volley:volley:1.0.0' 
} 

: 또는 간단한은 build.gradle에 (모듈 응용 프로그램) 파일이 포함되어 있습니다.

2

) 여기 https://search.maven.org/remote_content?g=com.jakewharton&a=disklrucache&v=LATEST에서 .JAR를 얻을 수 (폴더 당신의 "libs와"로 disklrucache-2.0.2.jar의 사본을 넣어) 또는 "의존성 안에 다른"컴파일 "지시문을 삽입 ":

compile 'com.jakewharton:disklrucache:2.0.2' 
+0

이 작업을 수행하려면 설치해야합니까? ImageLoader, ImageCache 또는 Volley와 같은가요? 이것들을 작동시키는 방법을 찾고 있습니다. – LizG

+0

Volley 라이브러리를 가져와야합니다. 나는 물건을 치우기 위해 나의 대답을 편집했다. 요약하면 : 1) 수입 발리 도서관; 2) 위에 제공된 내용으로 BitmapLruCache.class라는 새 파일을 만듭니다. 3) 레이아웃 xml을 편집하여 특별한 유형의 ImageView를 넣습니다. 4) 내 대답의 시작 부분에 제공된 5 줄의 코드를 활동 내에서 삽입하십시오. – statosdotcom

+0

내가 추가 : 컴파일 'com.android.volley : 발리 : 1.0.0', 내가 BitmapLruCache.java (오른쪽?)라는 새로운 자바 클래스를 만들고 내용을 편집 한 레이아웃, 활동 내부 코드의 다섯 라인을 삽입 추가되었습니다. - 내가 받고있는 오류 : 1) BitmapLruCache.java 클래스에서 메서드가 슈퍼 클래스에서 메서드를 재정의하지 않는다는 것을 나타내는 첫 번째 @Override에 오류가 있습니다. 2) 작업에서 마지막 두 행은 drawable 또는 url에서 파일을 가지고, 나는 파스에서 이미지 파일에서 이미지를 얻으려고합니다. 당신의 도움과 인내심에 대단히 감사합니다. – LizG

0

이러한 방식으로 시도하십시오.

ParseObject object = new ParseObject("Appetizers"); // class name 

    ParseFile postImage = object.getParseFile("imageFiles"); // column name 

    ParseQuery<ParseObject> getimage = new ParseQuery<ParseObject>("Appetizers"); // class 
    getimage.findInBackground(new FindCallback<ParseObject>() { 

     @Override 
     public void done(List<ParseObject> objects, ParseException e) { 
      // TODO Auto-generated method stub 
      if (e == null) { 
       // success 
       for (ParseObject parseObject : objects) { 
        ParseFile fileObject = (ParseFile) parseObject.get("imageFiles"); 

        Log.d("test", "get your image ... " + fileObject.getUrl()); 
        Picasso.with(getBaseContext()).load(fileObject.getUrl()).placeholder(R.drawable.ic_launcher) 
          .into(mImage); 
       } 
      } else { 
       // fail 
       Log.d("test", "error Message... " + e.getMessage()); 
      } 
     } 
    }); 

picasso 당신은 명확한 캐치 메모리 양식 picasso lib에 대한 장소 홀더를 설정하지 않았습니다.

+0

이것이 작동하고 있는데, 클래스의 모든 이미지를 읽고 마지막 이미지를 표시한다는 것입니다. 클릭 한 이미지가 표시되지 않습니다. – LizG

+0

어떻게 해결할 수 있습니까? – LizG

+0

parseFile Array 목록에 저장하고 어댑터에있는 모든 이미지를 마지막으로 표시합니다. –

관련 문제