【问题标题】:Downloading images from Parse从 Parse 下载图像
【发布时间】:2017-08-07 15:54:45
【问题描述】:

我正在开发一个使用解析服务器的项目。它的工作方式类似于 tinder,允许用户下载并显示附近其他用户的姓名和图像。

它有效,接受一个错误,即名称和图像在应用中显示时不正确匹配。

该应用程序最初会下载并创建一组本地用户,这可以正常工作。

然后我使用以下代码下载他们的图片:

 ParseQuery<ParseUser> query = ParseUser.getQuery();
        query.whereWithinKilometers("location", parseCustLocation, searchRadius);
        query.findInBackground(new FindCallback<ParseUser>() {


            @Override
            public void done(final List<ParseUser> objects, ParseException e) {
                if (e==null){
                    Log.d("state", "215 query successful");
                    if (objects.size()>0) {
                        for (final ParseUser user : objects){
                            Log.d("state", "231"+user.getUsername());
                            //TextView text = (TextView) findViewById(R.id.Name);

                            Users.add(user);
                            sUsers.add((String) user.get("Name"));
                            locations.add((ParseGeoPoint) user.get("location"));
                            parseFiles.add((ParseFile) user.get("image"));
                          }

                for (ParseFile file : parseFiles) {
                        file.getDataInBackground(new GetDataCallback() {


                            @Override
                            public void done(byte[] data, ParseException e) {
                                if (e==null){
                                    Log.d("state", "174 we've got data");
                                    Bitmap bmp = BitmapFactory.decodeByteArray(data,0,data.length);
                                    bitmaps.add(bmp);

                                    if (sUsers.size()==bitmaps.size()){
                                        swipeAdapter.updateData(sUsers,bitmaps);
                                    }

                                }
                            }
                        });}

据我所知,我认为问题在于线条

 Bitmap bmp = BitmapFactory.decodeByteArray(data,0,data.length);
    bitmaps.add(bmp);

例如,当我运行调试器时,我有两个数组,如下所示(bitmapFactory 似乎将位图放在 bitmap[] 的任何部分):

sUsers[0] = "Billy",   
sUsers[1] = "Sarah",   
sUsers[2] = "Jim",  

bitmaps[0] = Sarahs image,   
bitmaps[1] = Jims image,   
bitmaps[2] = Billys image

当我显然需要时

bitmaps[0] = Billys image,   
bitmaps[1] = Sarahs image,   
bitmaps[2] = Jims image,  

注意: 如果我使用调试器逐步运行应用程序,位图的顺序似乎正确。

【问题讨论】:

    标签: image parse-platform bitmap bitmapfactory


    【解决方案1】:

    file.getDataInBackground 是一个异步回调,因此第一个检索到的数据将首先添加到位图数组中,

    您可以使用 Hashmap,每个键是用户 objectId,键是用户的数据。

    Map<String, data> map = new HashMap<String, data>(); // your Hashmap 
    

    【讨论】:

      【解决方案2】:

      感谢 Julien,我设法让它正常工作,但使用大量嵌套 Async 任务的解决方法非常粗糙:

       parseFiles.get(0).getDataInBackground(new GetDataCallback() {
      
                              @Override
                              public void done(byte[] data, ParseException e) {
                                  if (e==null){
      
      
                                      Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
                                      bitmaps.add(0, bmp);
      
                                      parseFiles.get(1).getDataInBackground(new GetDataCallback() {
      
                                          @Override
                                          public void done(byte[] data, ParseException e) {
                                              if (e==null){
      
      
                                                  Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
      
                                                  bitmaps.add(1, bmp);
      
                                                  parseFiles.get(2).getDataInBackground(new GetDataCallback() {
      
                                                      @Override
                                                      public void done(byte[] data, ParseException e) {
                                                          if (e==null){
      
                                                              Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
      
                                                              bitmaps.add(2, bmp);
                                                              parseFiles.get(3).getDataInBackground(new GetDataCallback() {
      
                                                                  @Override
                                                                  public void done(byte[] data, ParseException e) {
                                                                      if (e==null){
      
                                                                     Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
      
                                                                      bitmaps.add(3, bmp);
      
                                                                          parseFiles.get(4).getDataInBackground(new GetDataCallback() {
      
                                                                              @Override
                                                                              public void done(byte[] data, ParseException e) {
                                                                                  if (e==null){
                                                                                      Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
      
                                                                                     bitmaps.add(4, bmp);
      
                                                                                    parseFiles.get(5).getDataInBackground(new GetDataCallback() {
      
                                                                                          @Override
                                                                                          public void done(byte[] data, ParseException e) {
                                                                                              if (e==null){
      
                                                                                                  Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
                                                                                                  //bitmaps.add(bmp);
      
                                                                                                  bitmaps.add(5, bmp);
      
      
                                                                                                  if (sVenueUsers.size()==bitmaps.size()){
                                                                                                      swipeAdapter.updateData(sUsers, bitmaps);
                                                                                                  }
                                                                                              }
                                                                                          }
                                                                                      });
      
      
                                                                                  }
                                                                              }
                                                                          });
      
      
                                                                      }
                                                                  }
                                                              });
      
                                                          }
                                                      }
                                                  });
      
                                              }
                                          }
                                      });
      
                                  }
                              }
                          });
      

      我尝试了您的 Hashmap 想法,但收到数据是无法识别的类的消息。我稍后会尝试解决它。​​

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-21
        相关资源
        最近更新 更多