PlaceAutoComplete FragmentからプレースIDを取得し、別のアクティビティに渡そうとしています。他のアクティビティは、Places.GeoDataApi.getPlaceById()メソッドから必要な情報をすべて取得することによってプレースIDを取得し、ビューを膨張させることになっています。ここでPlaceAutoCompleteAPIのデータがビューに膨らんでいない
はPlaceAutoCompleteフラグメントが格納されているクラスです。
public class PlaceSearch extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_place_search);
//Hiding SupportActionBar
try {
getSupportActionBar().hide();
} catch (Exception e) {
e.printStackTrace();
}
//PlaceAutoComplete Search Implementation
PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)
getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment);
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
@Override
public void onPlaceSelected(Place place) {
Log.i(String.valueOf(this), "Place: " + place.getName() + "\nID: " + place.getId());
String placeId = place.getId();
try {
Intent intent = new Intent(PlaceSearch.this, PlaceDetailsFromSearch.class);
Bundle extras = new Bundle();
extras.putString("placeID", placeId);
intent.putExtras(extras);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onError(Status status) {
Log.i(String.valueOf(this), "An error occurred: " + status);
}
});
}}
そして、ここでは、私がデータを膨らませるためにしようとしているクラスです。
public class PlaceDetailsFromSearch extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
String placeId, placeName, placeAddress, placeContact;
String placeWeblink;
float placeRating;
//Views References
RatingBar ratingBar;
TextView tv_place_name, tv_address, tv_call_info, tv_website_info;
private GoogleApiClient mGoogleApiClient;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_place_details_search);
Intent intent = getIntent();
if (intent != null) {
Bundle extras = intent.getExtras();
placeId = extras.getString("placeId");
}
//views
tv_place_name = (TextView) findViewById(R.id.tv_place_name_pd);
tv_address = (TextView) findViewById(R.id.tv_address);
tv_call_info = (TextView) findViewById(R.id.tv_call_info);
tv_website_info = (TextView) findViewById(R.id.tv_website_info);
ratingBar = (RatingBar) findViewById(R.id.rb_rating);
//Google API Client
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Places.GEO_DATA_API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).build();
loadData();
}
private void loadData() {
Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId)
.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(@NonNull PlaceBuffer places) {
if (places.getStatus().isSuccess()) {
final Place myPlace = places.get(0);
Log.i(String.valueOf(PlaceDetailsFromSearch.this),
"Place found: " + myPlace.getName() + "\n Address: " + myPlace.getAddress());
placeName = (String) myPlace.getName();
tv_place_name.setText(placeName);
placeAddress = (String) myPlace.getAddress();
tv_address.setText(placeAddress);
placeContact = (String) myPlace.getPhoneNumber();
tv_call_info.setText(placeContact);
placeRating = myPlace.getRating();
placeWeblink = String.valueOf(myPlace.getWebsiteUri());
tv_website_info.setText(placeWeblink);
placeRating = myPlace.getRating();
ratingBar.setRating(placeRating);
} else {
Log.i(String.valueOf(PlaceDetailsFromSearch.this), String.valueOf(places.getStatus()));
}
places.release();
}
});
}}
そして、これは私とエラーになりますStringがnullであることに関する多くの情報はありません。
E/UncaughtException:java.lang.IllegalArgumentExceptionが:与えられた文字列がandroid.os.Parcel.readExceptionで空または ヌルである(Parcel.java:1688) android.os.Parcel.readExceptionで(小包。 java:1637) com.google.android.gms.location.places.internal.zzj $ zza $ zza.zzb(不明な情報源) com.google.android.gms.location.places.internal.zzh.zza (不明な情報源)
私はこの上に私の頭を失っていた!エラーは大文字と小文字の区別のためです –
@GautamHansいつか起こります。 :) – MMBarno
ありがとうございます。 :) –