0

Я получаю имена друзей, дни рождения и фотографии профиля из Facebook.and Я показываю в списке, но картинки с картинками не совпадают с именами. Я попытался ниже код:Изображение профиля друзей не соответствует имени профиля для facebook в андроиде

public void onComplete(String response, Object state) { 

    Log.v("", "FriendListRequestONComplete"); 
    friendData = response; 
Log.v("friendData--", ""+friendData); 

//Create method to run on UI thread 
    MainActivity.this.runOnUiThread(new Runnable() { 
    @SuppressLint("NewApi") 
    public void run() { 

try { 
    //Parse JSON Data 
// pick(userID); 

    JSONObject json; 
    //json = Util.parseJson(friendData); 
    json = new JSONObject(friendData); 


    //Get the JSONArry from our response JSONObject 
    friendArray = json.getJSONArray("data"); 


    Log.v("friendArray--", ""+friendArray); 
    for(i = 0; i< friendArray.length(); i++) 
    { 
     frnd_obj = friendArray.getJSONObject(i); 

    try{ 
        friends.add("Name:"+frnd_obj.getString("name")+"\n"+"DOB:"+frnd_obj.getString("birthday")); 


    String userProfileID=frnd_obj.getString("id"); 


      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 

       new DownloadImageTask(img).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "https://graph.facebook.com/"+userProfileID+"/picture?type=small"); 

      } else{ 


      new DownloadImageTask(img).execute("https://graph.facebook.com/"+userProfileID+"/picture?type=small"); 

      } 


     } 
     catch(Exception e){ 

      //friends.add("Name:"+frnd_obj.getString("name")); 

     } 

    }list1.setAdapter(new lsAdapter(MainActivity.this)); 



    } catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (FacebookError e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
} 
}); 

Для профиля нагрузки Изображения Asyntask:

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 

private ProgressDialog mDialog; 
private ImageView bmImage; 
// Bitmap mIcon11 = null; 

public DownloadImageTask(ImageView bmImage) { 
    this.bmImage = bmImage; 
} 

protected void onPreExecute() { 

     mDialog = ProgressDialog.show(MainActivity.this,"Please wait...", "Retrieving data ...", true); 
    mDialog.show(); 
} 

protected Bitmap doInBackground(String... urls) { 
    Log.d("image", "do in"); 
    String urldisplay = urls[0]; 

    try { 
     Log.d("image", "do 1"); 

     InputStream in = new java.net.URL(urldisplay).openStream(); 
     mIcon11 = BitmapFactory.decodeStream(in); 
     Log.d("image", "do 2"); 
    } catch (Exception e) { 
     Log.e("Error", "image download error"); 
     Log.e("Error", e.getMessage()); 
     // mIcon11=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
     e.printStackTrace(); 
     Log.d("image", "do catch"); 
    } 
    Log.d("image", "do out"); 
    return mIcon11; 
} 

protected void onPostExecute(Bitmap result) { 
    //set image of your imageview 
    Log.d("image", "post"); 
    // bmImage.setImageResource(R.drawable.ic_launcher); 
    bmImage.setImageBitmap(null); 
    bmImage.setVisibility(View.INVISIBLE); 
    bmImage.setImageBitmap(result); 

    if(result!=null){ 
     //Toast.makeText(getApplicationContext(), "success", 5000).show(); 
     mIcon11=result; 

    }else { 
     //Toast.makeText(getApplicationContext(), "Not success", 5000).show(); 
     mIcon11=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
    } 
    // bmImage.setImageBitmap(mIcon11); 
    bitmapArray.add(mIcon11); 

    mDialog.dismiss(); 

    //close 
    //mDialog.dismiss(); 
} 
} 

Это BaseAdapter класс:

class lsAdapter extends BaseAdapter{ 
Context context; 
public lsAdapter(Context c){ 
    context=c; 

} 
@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    //return friends.size(); 
    return bitmapArray.size(); 
} 
@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 
@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 
@Override 
public View getView(int position, View v, ViewGroup group) { 
    // TODO Auto-generated method stub 
    LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 
    View vi=inflater.inflate(R.layout.customlist, null); 
    ImageView iv=(ImageView)vi.findViewById(R.id.iv); 
    ImageView next=(ImageView)vi.findViewById(R.id.nextimg); 
    TextView tv=(TextView)vi.findViewById(R.id.tv); 

     //iv.setImageURI(friendArray.getJSONObject(i).getString("id")); 
    tv.setText(friends.get(position)); 
    iv.setImageBitmap(bitmapArray.get(position)); 
    return vi; 
} 
    } 

Пожалуйста, помогите me.to получить друзей фотографию с там правильно имена.

ответ

0

Кажется, что вы просто добавляете bitmapArray в onPostExecute. Но поскольку ImageDownloadTasks выполняются асинхронно, нет гарантированного ордера, когда будет выполняться onPostExecute (изображение, добавленное позже, может закончить загрузку ранее). Вероятно, поэтому вы видите случайный порядок.

Вместо просто bitmapArray попробуйте использовать HashMap, при этом ключ является «id», а значение - растровым. Затем вы можете выполнить поиск в своем адаптере на основе идентификатора пользователя. В качестве альтернативы, когда вы создаете ImageDownloadTask, назначьте ему позицию и установите растровое изображение в правильной позиции в массиве.

+0

может дать мне пример кода? – user3331192