使用google places api加载地点的照片和详细信息

时间:2017-03-30 07:47:56

标签: android google-places-api

我正在使用图像视图和文本视图显示一个地方的图像以及其详细信息,当我选择一个有图像的地方时,但是当我选择一个没有图像的地方我的应用程序崩溃。如果没有图像,那么我只想显示地方的详细信息,但它没有....帮助将不胜感激。

这是我的活动

package com.example.dell.Swing;

import android.graphics.Bitmap;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.google.android.gms.common.ConnectionResult;
 import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
    import android.Manifest;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.os.Build;
    import android.support.annotation.NonNull;
    import android.support.v4.app.ActivityCompat;
    import android.util.Log;
    import android.view.View;
    import android.webkit.WebView;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;

    import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
    import com.google.android.gms.common.GooglePlayServicesRepairableException;
    import com.google.android.gms.location.places.Place;
    import com.google.android.gms.location.places.PlacePhotoMetadata;
    import com.google.android.gms.location.places.PlacePhotoMetadataBuffer;
    import com.google.android.gms.location.places.PlacePhotoMetadataResult;
    import com.google.android.gms.location.places.Places;
     import com.google.android.gms.location.places.ui.PlacePicker;
    import com.uber.sdk.android.core.UberSdk;
    import com.uber.sdk.android.rides.RideParameters;
    import com.uber.sdk.android.rides.RideRequestButton;
    import com.uber.sdk.core.auth.Scope;
    import com.uber.sdk.rides.client.SessionConfiguration;
    import com.squareup.picasso.Picasso;

import java.util.Random;

    public class aarakuhotels extends AppCompatActivity {
private GoogleApiClient mGoogleApiClient;
RideRequestButton requestButton;
TextView placeNameText;
   ImageView image;
TextView placeAddressText,placeemailtext,placelocaletext,placephonetext;
WebView attributionText;
Button getPlaceButton;
private final static int MY_PERMISSION_FINE_LOCATION = 101;
private final static int PLACE_PICKER_REQUEST = 1;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_aarakuhotels);
    mGoogleApiClient = new GoogleApiClient
            .Builder(this)
            .addApi(Places.GEO_DATA_API)
            .addApi(Places.PLACE_DETECTION_API)
            .enableAutoManage(this, new OnConnectionFailedListener() {
                @Override
                public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

                }
            })
            .build();

    requestPermission();
    SessionConfiguration config = new SessionConfiguration.Builder()
            .setClientId("wd9fPCpvtObmPOHBogaVdicLZW5Cos1K") //This is necessary
            .setRedirectUri("YOUR_REDIRECT_URI") //This is necessary if you'll be using implicit grant
            .build();

//这是一个方便的方法,它将默认配置设置为在其他组件中使用而不直接传递它。

      UberSdk.initialize(config);


    placeNameText = (TextView) findViewById(R.id.hotelname);
    placeAddressText = (TextView) findViewById(R.id.hoteladdress);
    placeemailtext =(TextView) findViewById(R.id.email);
    placelocaletext =(TextView) findViewById(R.id.locale);
    placephonetext =(TextView) findViewById(R.id.phone);
    image =(ImageView) findViewById(R.id.hotelsimage);
   // attributionText = (WebView) findViewById(R.id.attribution);
    getPlaceButton = (Button) findViewById(R.id.gethotels);
    getPlaceButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
            try {
                Intent intent = builder.build(aarakuhotels.this);
                startActivityForResult(intent, PLACE_PICKER_REQUEST);
            } catch (GooglePlayServicesRepairableException e) {
                e.printStackTrace();
            } catch (GooglePlayServicesNotAvailableException e) {
                e.printStackTrace();
            }

        }
    });
}

private void requestPermission() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_FINE_LOCATION);
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {
        case MY_PERMISSION_FINE_LOCATION:
            if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(getApplicationContext(), "This app requires location permissions to be granted", Toast.LENGTH_LONG).show();
                finish();
            }
            break;
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PLACE_PICKER_REQUEST){
        if (resultCode == RESULT_OK){

            Place place = PlacePicker.getPlace(aarakuhotels.this, data);
            //Log.d("TAG",data.toString()); wait check karru ok
            Log.d("TAG",place.toString());
            final String placeId = place.getId();

            new Thread(new Runnable() {
                @Override
                public void run() {
                    PlacePhotoMetadataResult result = Places.GeoDataApi
                            .getPlacePhotos(mGoogleApiClient, placeId).await();


                    if (result != null && result.getStatus().isSuccess()) {
                        PlacePhotoMetadataBuffer photoMetadataBuffer = result.getPhotoMetadata();

                //getting error here when i select a place with no photo and app crashes  --> PlacePhotoMetadata photo = photoMetadataBuffer.get(0);

                        final Bitmap locationimg = photo.getPhoto(mGoogleApiClient).await()
                                .getBitmap();

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                image.setImageBitmap(locationimg);
                            }
                        });


                    }
                }
            }).start();



           // Picasso.with(this).load("https://lh5.googleusercontent.com/-_jVRD4o6K20/VrAgjefDtCI/AAAAAAABoTw/TH6pNjEcU-MelyMU8ZzLikO1HVpMyHDPQCJkC/s544-k-no/").into(image);
            placeNameText.setText("Name:"+place.getName());
            placephonetext.setText("Phone:"+place.getPhoneNumber());
            placeemailtext.setText("Website:"+place.getWebsiteUri());
            placelocaletext.setText("Rating:"+place.getRating());
            placeAddressText.setText("Address:"+place.getAddress());
           // if (place.getAttributions() == null) {
             //   attributionText.loadData("no attribution", "text/html; charset=utf-8", "UFT-8");
            //} else {
              //  attributionText.loadData(place.getAttributions().toString(), "text/html; charset=utf-8", "UFT-8");
            //}
        }
    }
}
 }

1 个答案:

答案 0 :(得分:0)

发现问题我用普通代码替换了Threads ......工作