2015-11-09 3 views
0

Я пытаюсь создать приложение, которое захватывает все ParseFiles в ParseObject и отображает их в GridView, последовательно.Загрузка изображений с помощью Parse в GridView

Я сделал это с одним действием, которое представляет собой ленту новостей, и все работает нормально.

Но когда я пытаюсь реализовать тот же метод в своей другой деятельности, он не работает.

Я использую AsyncTask для загрузки изображений в фоновом режиме.

Это мой код:

ThumbnailItems.java (POJO класс)

public class ThumbnailItems { 
    Bitmap thumb; 
    // Empty constructor. 
    public ThumbnailItems(){ 

    } 
    // Constructor. 
    public ThumbnailItems(Bitmap thumb){ 
     super(); 
     this.thumb = thumb; 
    } 
    // Getter. 
    public Bitmap getImage(){ 
     return thumb; 
    } 
    // Setter. 
    public void setImage(Bitmap thumb){ 
     this.thumb = thumb; 
    } 
} 

Мой AsyncTask:

private class RemoteDataTask extends AsyncTask<Void, Void, Void> { 

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

    @Override 
    protected Void doInBackground(Void... params) { 
     thumbItemsList = new ArrayList<ThumbnailItems>(); 
     try { 
      ParseQuery<ParseObject> postQuery = new ParseQuery<ParseObject>("Posts"); 

      postQuery.orderByDescending("createdAt"); 
      objectList = postQuery.find(); 
      for (ParseObject posts : objectList){ 

       final ThumbnailItems thumbItems = new ThumbnailItems(); 
       // Locate user profile picture. 
       ParseFile thumbFile = (ParseFile) posts.get("author_img"); 
       thumbFile.getDataInBackground(new GetDataCallback() { 
        @Override 
        public void done(byte[] bytes, ParseException e) { 
         if (e == null) { 
          Bitmap userImage = Bitmap.createScaledBitmap(
            BitmapFactory.decodeByteArray(bytes, 0, bytes.length) 
            , 150, 150, false); 
          thumbItems.setImage(userImage); 
         } else { 
          Log.d("ParseException", "Error: " + e.getMessage()); 
          e.printStackTrace(); 
         } 
        } 
       }); 
       thumbItemsList.add(thumbItems); 
      } 
     } catch (ParseException e){ 
      Log.e("ParseException", "Error: " + e.getMessage() + " with code: " + e.getCode()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View activityView = layoutInflater.inflate(R.layout.activity_profile, null, false); 
     gridView = (GridView) activityView.findViewById(R.id.gridView); 
     gridViewAdapter = new GridViewAdapter(getApplicationContext() 
       , R.layout.profile_viewpager_tab1_children 
       , thumbItemsList); 
     gridView.setAdapter(gridViewAdapter); 
    } 
} 

(я уже видел this учебник, но я действительно хочу быть в соответствии с моим кодом)

ответ

0

Я думаю, что тесто использовать Как. и не использовать AsyncTask для загрузки изображений в фоновом режиме.

ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
       "ClassName"); 
     query.findInBackground(new FindCallback<ParseObject>() { 

      @Override 
      public void done(List<ParseObject> list, ParseException e) { 
       // TODO Auto-generated method stub 
       if (e == null) { 
        // hear u will get responce. 
        for (ParseObject parseObject : list) { 
         ParseFile image = (ParseFile) parseObject.get(""); // hear 
                      // set 
                      // column 
                      // name 
                      // same 
                      // as 
                      // parse 
                      // table 
         if (image != null) { 
          // hear store image into your custom array. 
          // Like... 
          Log.e("get Image ", 
            " IMAGE URL IS " + image.getUrl()); 
         } 
        } 

        // and hear u can set your adapter 
        // and yr grid view 
        // in adapter to use Picasso libary for image shower. 
        // how to use picasso lib. 
        Picasso.with(getApplicationContext()).load("image url") 
          .fit().into(imageview); 
       } else { 
        // hear is yr fail responce 
        // e.getMessage() 
       } 

      } 
     }); 
+0

Большое спасибо, брат. Я реализовал это, и он работал как шарм! – user5460905

+0

Это плохое решение. Это приведет к тому, что адаптер вызовет этот фоновый метод каждый раз, когда пользователь прокрутит, что приведет к задержке в производительности. Вероятно, вы испытаете, что ваш вид перекоса не является гладким. –

Смежные вопросы