0

Je reçois des noms d'amis, anniversaires et photos de profil de Facebook.et je montre dans la liste, mais les images de profil ne correspond pas à leurs noms. Je essayé ci-dessous le code:Photo de profil d'amis ne correspond pas avec le nom de profil pour Facebook dans android

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

Pour le profil de charge Photos 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(); 
} 
} 

Cette classe est 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; 
} 
    } 

S'il vous plaît aider me.to faire des amis avec photo de profil il correct des noms.

Répondre

0

Il semble que vous ajoutiez simplement au bitmapArray dans onPostExecute. Mais comme les ImageDownloadTasks sont exécutées de manière asynchrone, il n'y a pas d'ordre garanti à l'exécution de onPostExecute (une image ajoutée plus tard pourrait terminer le chargement plus tôt). C'est probablement pourquoi vous voyez l'ordre aléatoire. À la place d'un bitmapArray, essayez d'utiliser un HashMap, la clé étant le "id", et la valeur étant le bitmap. Vous pouvez ensuite effectuer une recherche dans votre adaptateur en fonction de l'ID utilisateur. Sinon, lorsque vous créez ImageDownloadTask, attribuez-lui une position et définissez le bitmap dans la position correcte dans le tableau.

+0

pouvez-vous me donner un exemple de code? – user3331192

Questions connexes