2017-08-07 122 views
0

我正在使用解析服務器的項目。它像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); 

,例如,當我運行調試器我有兩個陣列如下(位圖工廠似乎把位圖的任何部分位圖[]):

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, 

注: 位圖似乎是正確的順序,如果我跑通過使用調試器一步一步的應用程序。

回答

0

file.getDataInBackground是一個異步回調,因此檢索到的將是第一個加入的位圖陣列的第一個數據,

您可以使用哈希映射每個鍵會在用戶OBJECTID和關鍵用戶的數據。

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

感謝朱利安,我設法得到它正常工作,但使用大量的嵌套的異步任務的一種非常原始的解決方法:

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的想法,但得到了數據的消息一個無法識別的類。我會嘗試以後再做。