2017-10-02 3 views
1

ich möchte eine liste von nahe gelegenen cafés mit name und ihre bilder zeigen. Hier ist mein Codewie bild von in der nähe caffe mit name in einer liste anzeigen

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

aber Fehler bekommen.

E/Android Runtime: fatal EXCEPTION: main Prozess: com.example.rohit.gayatri, PID: 18853 java.lang.IllegalStateException bei com.google.android.gms.common.internal.zzbp. zzbg (Unbekannte Quelle) bei com.google.android.gms.common.data.zzc.zzbu (Unbekannte Quelle) bei com.google.android.gms.common.data.zzc. (Unbekannte Quelle) at com. google.android.gms.location.places.internal.zzav. (Unbekannt Quelle) unter com.google.android.gms.location.places.internal.zzar. (Unbekannt Quelle) bei com.google.android.gms.location.places.PlacePhotoMetadataBuffer.get (Unbekannt Source) bei com.example.rohit.gayatri.PlacePhoto $ ViewAdapter $ 1.onComplete (PlacePhoto.java:313) bei com.google. android.gms.tasks.zzf.run (Unbekannte Quelle) bei android.os.Handler.handleCallback (Handler.java:739) bei android.os.Handler.dispatchMessage (Handler.java:95) bei android.os .Looper.loop (Looper.java:135) bei android.app.ActivityThread.main (ActivityThread.java:5343) bei java.lang.reflect.Method.invoke (native Methode) bei java.lang.reflect. Method.invoke (Methode.java:372) bei com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:905) bei com.android.internal.os.ZygoteInit.main (ZygoteInit.java:700)

jede Art von Hilfe ist willkommen.

+1

fügen Sie bitte Ihre AndroidManifest.xml hinzu –

+1

Ihre GoogleApiClient Variable sollte definiert werden. –

+1

Die Ausnahme scheint von diesem Aufruf verursacht zu sein: 'photoMetadataBuffer.get (0)' aber ich bin nicht sicher warum, weil die Dokumentation nicht erwähnt, dass die 'get' Methode diese Art von Ausnahme auslösen kann. – Titus

Antwort

0

Ist diese Zeile korrekt? PlacePhotoMetadataBuffer photoMetadataBuffer = photos.getPhotoMetadata(); Ich denke, es sollte List<PlacePhotoMetadataBuffer> photoMetadataBuffer = photos.getPhotoMetadata(); sein Wie Sie erwähnt haben, ist es eine Liste !!! Und auch auf NullPointerExceptoins zu überprüfen. if(photoMetadataBuffer.size()>0){ //do the rest }

1

hallo freunde ich habe lösung für mein problem. ich ändere den Code ein bisschen.

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

Wenn jemand eine bessere Lösung dafür wissen, bitte posten.

Verwandte Themen