2017-08-07 4 views
0

私は解析サーバーを使用するプロジェクトに取り組んでいます。これはtinderのように動作し、ユーザーは近くの他のユーザーの名前とイメージをダウンロードして表示することができます。パースから画像をダウンロード

これは、アプリに表示されたときに名前と画像が正しく一致しない1つのバグを受け入れます。

アプリは最初にローカルユーザーのアレイをダウンロードして作成しますが、これは問題なく動作します。

私は、次のコードを使用して、その画像をダウンロード:

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); 

であると思います私は2つの配列を持っています(bitmapFactoryは、ビットマップ[]の任意の部分にビットマップを置いているようです):

私は

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

NOTEが必要な場合は、明らかに: ビットマップは、私は、デバッガを使用してステップバイステップのアプリを実行する場合は、正しい順序であるように見えます。

答えて

0

検索された第1のデータは、ビットマップ配列に最初に追加されますので、file.getDataInBackgroundあなたは各キーは、ユーザーのObjectIdとキー、ユーザーのデータとなりますHashMapを使用することができ、

非同期コールバックです。

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); 
                          } 
                         } 
                        } 
                       }); 


                      } 
                     } 
                    }); 


                   } 
                  } 
                 }); 

                } 
               } 
              }); 

             } 
            } 
           }); 

          } 
         } 
        }); 

私はあなたのハッシュマップのアイデアを試してみましたが、データがあったとのメッセージを得ました認識できないクラス。私は後でそれを試してみる。

関連する問題