【发布时间】:2017-10-02 11:44:38
【问题描述】:
我想显示附近咖啡店的名称和图片列表。这是我的代码
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;
}
}
但出现错误。
E/AndroidRuntime: 致命异常: main 进程: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.places.PlacePhotoMetadataBuffer.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)
感谢任何形式的帮助。
【问题讨论】:
-
请添加您的 AndroidManifest.xml
-
应该定义您的 GoogleApiClient 变量。
-
异常似乎是由这个调用引起的:
photoMetadataBuffer.get(0)但我不知道为什么,因为文档没有提到get方法可以抛出这种异常。
标签: java android google-api google-places-api android-image