2017-08-20 2 views
0

J'utilise retrofit 1.9 pour extraire des données d'une API de repos pour les afficher dans recyclerview. Jusqu'à présent, je reçois toutes les informations nécessaires sur l'utilisateur. Maintenant, je veux aussi montrer l'image des utilisateurs sur ce recyclerview. Maintenant, pour l'information de l'utilisateur, j'ai une API. comme "https://sample.app.com/api/user". Dans cette API, je n'ai aucun champ d'image. pour recueillir l'image de l'utilisateur, j'ai une autre API comme "https://sample.app.com/api/profileimage/" + mail.J'essaie d'ajouter une image en utilisant 'com.squareup.picasso: picasso: 2.5.2'. Mais après avoir lancé le programme, je ne vois rien sur recyclerview.Comment régler l'image à partir d'une autre API à l'aide de Retrofit 1.9 dans recyclerview

Voici ma classe de modèle pour l'utilisateur. Je voudrais mentionner qu'aucune impage déposée n'est présente dans le fichier json.

utilisateur api

[ 
{ 
    "_id": "588797978", 
    "dn": "CNdfgdfgdfg", 
    "sn": "Das", 
    "title": "title", 
    "givenName": "Tom", 
    "whenChanged": "20170623093215.0Z", 
    "company": "Company limited", 
    "name": "Soutrik Das", 
    "mail": "[email protected]", 
    "mobile": "+123456", 
    "updated_at": "2016-12-09T13:37:55.721Z" 
}, 
... 
] 

Ma classe de modèle est

public class ColleagueModel { 

public String _id, 
     dn, 
     givenName, 
     whenChanged, 
     name, 
     mail, 
     updatedAt, 
     sn, 
     title, 
     department, 
     company, 
     mobile; 
.............. 
} 

ima donnant une partie de adpater classe

@Override 
public void onBindViewHolder(ColleagueHolder holder, int position) { 

    final ColleagueModel currentColleague = mColleague.get(position); 
    Picasso.with(holder.itemView.getContext()); 

    holder.colleagueName.setText(currentColleague.name); 
    holder.companyName.setText(currentColleague.company); 
    holder.jobTitle.setText(currentColleague.title); 

    Picasso.with(holder.itemView.getContext()).load(Constants.HTTP.PHOTO_URL + currentColleague.mail).into(holder.colleaguePicture); 

    holder.cardView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Intent i=new Intent(context,DetailMyColleague.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      i.putExtra(/* here I want to send image*/) 
      i.putExtra("name",currentColleague.name); 
      i.putExtra("title",currentColleague.title); 
      i.putExtra("company",currentColleague.company); 
      i.putExtra("mobile",currentColleague.mobile); 
      i.putExtra("mail",currentColleague.mail); 
      i.putExtra("department",currentColleague.department); 
      context.startActivity(i); 
     } 
    }); 

URL de base

public class Constants { 

    public static final class HTTP { 
     public static final String BASE_URL = "https://sample.app.com"; 
     public static final String PHOTO_URL = BASE_URL + "/api/profileimage/"; 
    } 
     public static final class DATABASE{ 

    } 

    } 

une partie de l'activité de détail

Intent intent = getIntent(); 

    //RECEIVE DATA 
    name = intent.getExtras().getString("name"); 
    int profileImage = intent.getIntExtra("image", 0); 
    String title = intent.getExtras().getString("title"); 
    String company = intent.getExtras().getString("company"); 
    mobile = intent.getExtras().getString("mobile"); 
    String mail = intent.getExtras().getString("mail"); 
    String dept = intent.getExtras().getString("department"); 

    //BIND DATA 
    _profilePic.setImageResource(profileImage); 
    _profileName.setText(name); 
    _colleagueName.setText(name); 
    _mobile.setText(mobile); 
    _mobile.setOnClickListener(this); 
    _email.setText(mail); 
    _email.setOnClickListener(this); 
    _company.setText(company); 
    _department.setText(dept); 
    _jobRole.setText(title); 

service Api

public interface ColleagueApiService { 
    @GET("/api/users") 
    void getColleague(Callback<String> flowers); 
} 

de classe Titulaire

@Override 
public int getItemCount() { 
    return mColleague.size(); 
} 

public class ColleagueHolder extends RecyclerView.ViewHolder{ 

    public CardView cardView; 
    public ImageView colleaguePicture; 
    public TextView colleagueName; 
    public TextView companyName; 
    public TextView jobTitle; 

    public ColleagueHolder(View itemView) { 
     super(itemView); 
     colleaguePicture= itemView.findViewById(R.id.colleague_picture); 
     colleagueName= itemView.findViewById(R.id.colleague_name); 
     companyName= itemView.findViewById(R.id.company_name); 
     jobTitle= itemView.findViewById(R.id.job_title); 
     cardView= itemView.findViewById(R.id.cardview_user); 

    } 
} 

Comment puis-je ajouter une image dans recyclerview en utilisant picasso.

Log Cat

08-20 11:57:03.798 1581-2750/? I/ActivityManager: START u0 {cmp=demo.app.com.bluapp_client_and/.activity.myColleague.MyColleaguesPage} from uid 10164 on display 0 
08-20 11:57:03.869 29300-29304/demo.app.com.bluapp_client_and I/art: Do partial code cache collection, code=54KB, data=55KB 
08-20 11:57:03.871 29300-29304/demo.app.com.bluapp_client_and I/art: After code cache collection, code=45KB, data=50KB 
08-20 11:57:03.871 29300-29304/demo.app.com.bluapp_client_and I/art: Increasing code cache capacity to 256KB 
08-20 11:57:03.882 29300-29332/demo.app.com.bluapp_client_and D/EGL_emulation: eglMakeCurrent: 0xa4c164a0: ver 2 0 (tinfo 0xa49536c0) 
08-20 11:57:03.970 29300-29300/demo.app.com.bluapp_client_and D/Controller: Error :: com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 12 path $ 
08-20 11:57:03.970 1581-1601/? I/ActivityManager: Displayed demo.app.com.bluapp_client_and/.activity.myColleague.MyColleaguesPage: +168ms 
08-20 11:57:04.355 1581-1797/? I/WindowManager: Destroying surface Surface(name=demo.app.com.bluapp_client_and/demo.app.com.bluapp_client_and.activity.main.MainOptionPage) called by com.android.server.wm.WindowStateAnimator.destroySurface:2014 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:881 com.android.server.wm.WindowState.destroyOrSaveSurface:2073 com.android.server.wm.AppWindowToken.destroySurfaces:363 com.android.server.wm.AppWindowToken.notifyAppStopped:389 com.android.server.wm 
+0

pouvez-vous obtenir l'image de cette url ** Constantes. HTTP.PHOTO_URL + currentColleague.mail **, vérifiez-vous dans le navigateur Web? –

+0

@BhuvaneshBs Oui sur webbrowser Je reçois l'image –

+0

https: //.../api/profileimage/mailadess. Mais je n'avais aucun champ sur la classe de modèle. parce que l'image api est totalement différente. Dans l'API utilisateur, je n'ai pas d'option impage. comment puis-je combiner cette image à cette information de l'utilisateur –

Répondre

0

l'image Url Pass détail page

holder.cardView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      Intent i=new Intent(context,DetailMyColleague.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      i.putExtra("IMAGE_URL",Constants.HTTP.PHOTO_URL + currentColleague.mail); 
      i.putExtra("name",currentColleague.name); 
      i.putExtra("title",currentColleague.title); 
      i.putExtra("company",currentColleague.company); 
      i.putExtra("mobile",currentColleague.mobile); 
      i.putExtra("mail",currentColleague.mail); 
      i.putExtra("department",currentColleague.department); 
      context.startActivity(i); 
     } 
    }); 

et obtenir l'image

Intent intent = getIntent(); 

    //RECEIVE DATA 
    name = intent.getExtras().getString("name"); 
    String profileImage = intent.getExtras().getString("IMAGE_URL"); 
    String title = intent.getExtras().getString("title"); 
    String company = intent.getExtras().getString("company"); 
    mobile = intent.getExtras().getString("mobile"); 
    String mail = intent.getExtras().getString("mail"); 
    String dept = intent.getExtras().getString("department"); 

    //BIND DATA 
    Picasso.with(this).load(profileImage).into(_profilePic); 

// _profilePic.setImageResource(profileImage); 
    _profileName.setText(name); 
    _colleagueName.setText(name); 
    _mobile.setText(mobile); 
    _mobile.setOnClickListener(this); 
    _email.setText(mail); 
    _email.setOnClickListener(this); 
    _company.setText(company); 
    _department.setText(dept); 
    _jobRole.setText(title); 
+0

ce code ne fonctionne pas. cela montre que je ne peux pas appliquer de cette manière. –

+0

Dois-je créer une classe de modèle pour l'image? ou puis-je ajouter cette propriété d'image dans ColleagueModel? –

+0

pour l'image Je n'ai aucune donnée json. seulement comme l'image http url. Comment est-ce que je peux ajouter cet inamge de manière correcte, de sorte que je puisse également ajouter cette image sur la base de données à l'avenir? –