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