Java 如何在列表中以名称显示附近咖啡馆的图像

Java 如何在列表中以名称显示附近咖啡馆的图像,java,android,google-api,google-places-api,android-image,Java,Android,Google Api,Google Places Api,Android Image,我想展示一张附近咖啡店的名单,上面有咖啡店的名字和图片。这是我的密码 public class ViewAdapter extends BaseAdapter{ Context context; private List<GetterAndSetter> items; private LayoutInflater inflater; ViewHolder viewHolder; private GoogleApiClient mApiClie

我想展示一张附近咖啡店的名单,上面有咖啡店的名字和图片。这是我的密码

public class ViewAdapter extends BaseAdapter{
    Context context;
    private List<GetterAndSetter> items;
    private LayoutInflater inflater;
    ViewHolder viewHolder;

    private GoogleApiClient mApiClient;

    public ViewAdapter(Context context, List<GetterAndSetter> listItem){
        this.context = context;
        this.items = listItem;
    }

    public  class ViewHolder {
        TextView txtPlaceId;
        TextView txtAddress;
        ImageView img;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return items.indexOf(getItem(position));
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (inflater == null){
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }
        final GetterAndSetter item =items.get(position);

        if (convertView == null){
            convertView= inflater.inflate(R.layout.list_layout,null);
            viewHolder = new ViewAdapter.ViewHolder();
            viewHolder.txtPlaceId = (TextView) convertView.findViewById(R.id.txtPlaceId);
            viewHolder.txtAddress = (TextView) convertView.findViewById(R.id.txtAddress);
            viewHolder.img = (ImageView) convertView.findViewById(R.id.img);

            convertView.setTag(viewHolder);
            convertView.setTag(R.id.txtPlaceId, viewHolder.txtPlaceId);
            convertView.setTag(R.id.txtAddress, viewHolder.txtAddress);
            convertView.setTag(R.id.img, viewHolder.img);
        }else {
            viewHolder = (ViewAdapter.ViewHolder) convertView.getTag();
        }
        String PlaceName = items.get(position).getPlaceName();
        viewHolder.txtPlaceId.setText(items.get(position).getPlace_Id()+"\n"+PlaceName);
        viewHolder.txtAddress.setText(items.get(position).getAddress());

       // String PlaceId ="ChIJF1un_5LBwjsR0AdAQM5TGAE";
       // String PlaceId ="ChIJhXQqHPfBwjsR4BzVyYVZ31c";
       // String PlaceId ="ChIJhXQqHPfBwjsR4BzVyYVZ31c";
        Log.d("placeID",items.get(position).getPlace_Id());



        final Task<PlacePhotoMetadataResponse> photoMetadataResponse = mGeoDataClient.getPlacePhotos(items.get(position).getPlace_Id());
        photoMetadataResponse.addOnCompleteListener(new OnCompleteListener<PlacePhotoMetadataResponse>() {
            @Override
            public void onComplete(@NonNull Task<PlacePhotoMetadataResponse> task) {
                // Get the list of photos.
                PlacePhotoMetadataResponse photos = task.getResult();
                // Get the PlacePhotoMetadataBuffer (metadata for all of the photos).
                PlacePhotoMetadataBuffer photoMetadataBuffer = photos.getPhotoMetadata();
                // Get the first photo in the list.
                PlacePhotoMetadata photoMetadata = photoMetadataBuffer.get(0);
                Log.d("photos", String.valueOf(photoMetadata));
                // Get the attribution text.
                CharSequence attribution = photoMetadata.getAttributions();
                // Get a full-size bitmap for the photo.
                Task<PlacePhotoResponse> photoResponse = mGeoDataClient.getPhoto(photoMetadata);
                photoResponse.addOnCompleteListener(new OnCompleteListener<PlacePhotoResponse>() {
                    @Override
                    public void onComplete(@NonNull Task<PlacePhotoResponse> task) {
                        PlacePhotoResponse photo = task.getResult();
                        Bitmap bitmap = photo.getBitmap();
                        viewHolder.img.setImageBitmap(bitmap);
                    }
                });
            }
        });
        return convertView;
    }
} 
公共类ViewAdapter扩展了BaseAdapter{
语境;
私人清单项目;
私人充气机;
持票人持票人;
私有GoogleAppClient客户端;
公共ViewAdapter(上下文,列表项){
this.context=上下文;
this.items=列表项;
}
公共类视图持有者{
TextView txtPlaceId;
TextView txtAddress;
图像视图img;
}
@凌驾
public int getCount(){
返回items.size();
}
@凌驾
公共对象getItem(int位置){
返回项目。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回items.indexOf(getItem(position));
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
如果(充气器==null){
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
}
最终GetterAndSetter项=items.get(位置);
if(convertView==null){
convertView=充气机充气(右布局列表布局,空);
viewHolder=新的ViewAdapter.viewHolder();
viewHolder.txtPlaceId=(TextView)convertView.findViewById(R.id.txtPlaceId);
viewHolder.txtAddress=(TextView)convertView.findViewById(R.id.txtAddress);
viewHolder.img=(ImageView)convertView.findViewById(R.id.img);
convertView.setTag(viewHolder);
setTag(R.id.txtPlaceId,viewHolder.txtPlaceId);
setTag(R.id.txtAddress,viewHolder.txtAddress);
setTag(R.id.img,viewHolder.img);
}否则{
viewHolder=(ViewAdapter.viewHolder)convertView.getTag();
}
String PlaceName=items.get(position.getPlaceName();
viewHolder.txtPlaceId.setText(items.get(position.getPlace_Id()+“\n”+地名);
viewHolder.txtAddress.setText(items.get(position.getAddress());
//字符串PlaceId=“ChIJF1un_5LBwjsR0AdAQM5TGAE”;
//字符串PlaceId=“chijhxqhpfbwjsr4bzvyyvz31c”;
//字符串PlaceId=“chijhxqhpfbwjsr4bzvyyvz31c”;
Log.d(“placeID”,items.get(position.getPlace_Id());
最终任务photoMetadataResponse=mGeoDataClient.getPlacePhotos(items.get(position.getPlace_Id());
photoMetadataResponse.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
//获取照片列表。
PlacePhotoMetadataResponse photos=task.getResult();
//获取PlacePhotoMetadataBuffer(所有照片的元数据)。
placephotometadabuffer photometadabuffer=photos.getPhotoMetadata();
//获取列表中的第一张照片。
PlacePhotoMetadata photoMetadata=photometadabuffer.get(0);
Log.d(“照片”,String.valueOf(photoMetadata));
//获取属性文本。
CharSequence Attributes=photoMetadata.getAttributes();
//获取照片的全尺寸位图。
任务photoResponse=mGeoDataClient.getPhoto(photoMetadata);
photoResponse.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
PlacePhotoResponse photo=task.getResult();
位图Bitmap=photo.getBitmap();
viewHolder.img.setImageBitmap(位图);
}
});
}
});
返回视图;
}
} 
但这是一个错误

E/AndroidRuntime:致命异常:主 流程:com.example.rohit.gayatri,PID:18853 java.lang.IllegalStateException 位于com.google.android.gms.common.internal.zzbp.zzbg(未知来源) 位于com.google.android.gms.common.data.zzc.zzbu(未知来源) 在com.google.android.gms.common.data.zzc.(未知来源) 在com.google.android.gms.location.places.internal.zzav.(未知) (来源) 在com.google.android.gms.location.places.internal.zzar.(未知) (来源) 在com.google.android.gms.location.place.placephotometadabuffer.get(未知)上 (来源) 位于com.example.rohit.gayatri.PlacePhoto$ViewAdapter$1.onComplete(PlacePhoto.java:313) 位于com.google.android.gms.tasks.zzf.run(未知来源) 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:135) 位于android.app.ActivityThread.main(ActivityThread.java:5343) 位于java.lang.reflect.Method.invoke(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:905) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

感谢您的任何帮助

这行对吗?
placephotometadabuffer photometadabuffer=photos.getPhotoMetadata()
我认为应该是
List photometadabuffer=photos.getPhotoMetadata()
正如你提到的,这是一个列表!!!
还要检查是否存在NullPointerExceptions。
if(photometadabuffer.size()>0){
//做剩下的

}

朋友们好,我找到了解决问题的方法。 我稍微修改了一下代码

new AsyncTask<Void,Void,Void>(){
            Bitmap image;
            @Override
            protected Void doInBackground(Void... params) {

                PlacePhotoMetadataResult result = Places.GeoDataApi.getPlacePhotos(mGoogleApiClient, items.get(position).getPlace_Id()).await();
                if (result.getStatus().isSuccess()) {
                    PlacePhotoMetadataBuffer photoMetadataBuffer = result.getPhotoMetadata();
                    if (photoMetadataBuffer.getCount() > 0) {
                        PlacePhotoMetadata photo = photoMetadataBuffer.get(0);
                        CharSequence attribution = photo.getAttributions();
                        image = photo.getScaledPhoto(mGoogleApiClient, 200, 200).await()
                                .getBitmap();

                        Log.d("Bitmap", String.valueOf(image));

                       // viewHolder.img.setImageBitmap(image);
                    }
                    photoMetadataBuffer.release();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                viewHolder.img.setImageBitmap(image);

                super.onPostExecute(aVoid);
            }
        }.execute();
newasynctask(){
B