私は現在、私の武道組織のためのアプリを開発しています。アプリ内では、それぞれの武道のdojosが私の州にどこにあるのかを示すピンのある地図を表示します。私はあなたが引き出しのトグルから地図にアクセスするアプリのように、断片を使ってこれをやっています。私のLocationFragment
はSupportMapFragment
を拡張し、OnMapReadyCallback
を実装しています。ただし、[場所]タブを開くと、地図が読み込まれてからクラッシュします。これはAndroidのモニター伝わってくるエラーです:戻り値の型またはコールバックが最後の引数として必要ですRetrofit2 Android?
java.lang.IllegalArgumentException: PinsApiInterface.getStreams: Must have either a return type or Callback as last argument.
at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:107)
at retrofit.RestMethodInfo.parseResponseType(RestMethodInfo.java:270)
at retrofit.RestMethodInfo.<init>(RestMethodInfo.java:97)
at retrofit.RestAdapter.getMethodInfo(RestAdapter.java:213)
at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:236)
at java.lang.reflect.Proxy.invoke(Proxy.java:393)
at $Proxy0.getStreams(Unknown Source)
at com.mycompany.kfcomapplication.fragments.LocationFragment.onMapReady(LocationFragment.java:85)
at com.google.android.gms.maps.SupportMapFragment$zza$1.zza(Unknown Source)
at com.google.android.gms.maps.internal.zzt$zza.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:387)
at zu.a(:com.google.android.gms.DynamiteModulesB:82)
at maps.ad.t$5.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
私はエラーが私がRetrofit2を経由してアクセスする私のPinsApiInterface.getStreams、とは何かを持っていることを理解し、私は問題を解決するかどうかはわかりません。私はTutsplusの人たちと一緒に、どのように彼らが動物園のアプリケーションにマップを実装しているか(私が見ているコードはhereです)。彼らのチュートリアルでは、の下に上書きとしてpublic void success()
とpublic void failure()
を使用する古いバージョンのRetrofitを使用しています。 Retrofit2では、これはonResponse()
とonFailure()
に変更されました。私はこのクラッシュを修正する方法について複数の異なるスレッドを検索しましたが、私は運がありませんでした。私はこの問題を解決する方法についていくつかの助けを得ることができることを願っていました。私はAndroidでRetrofit2を使用するのがとても新しいので、どんな助けでも大歓迎です。以下は私のLocationFragment.java
と私のPinsApiInterface.java
のコードです。ここ はLocationFragment.java
です:
public class LocationFragment extends SupportMapFragment implements OnMapReadyCallback {
public static LocationFragment getInstance() {
LocationFragment fragment = new LocationFragment();
return fragment;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getMapAsync(this);
}
@Override
public void onMapReady(final GoogleMap googleMap) {
CameraPosition position = CameraPosition.builder()
.target(new LatLng(42.921966, -85.718533))
.zoom(16f)
.bearing(0.0f)
.tilt(0.0f)
.build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(position), null);
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
googleMap.setTrafficEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
MarkerOptions options = new MarkerOptions().position(new LatLng(42.921966, -85.718533));
options.title("KFCOM");
options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
googleMap.addMarker(options);
googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
marker.showInfoWindow();
return true;
}
});
RestAdapter adapter = new RestAdapter.Builder()
.setEndpoint("https://gist.githubusercontent.com/anonymous/101ffbf7e1aed60b7caf7d3d5418bfde/raw/43b5d1fa6862fd1dce84044821cdf1a9d48b6ca2")
.build();
PinsApiInterface pinsApiInterface = adapter.create(PinsApiInterface.class);
//This line is what is causing the crash.
pinsApiInterface.getStreams(new Callback<List<Pin>>() {
@Override
public void onResponse(Call<List<Pin>> pins, Response<List<Pin>> response) {
if(!isAdded() || pins == null || pins.equals(""))
{
return;
}
for(Pin pin : response.body()) {
MarkerOptions options = new MarkerOptions().position(new LatLng(pin.getLatitude(), pin.getLongitude()));
options.title(pin.getName());
options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
googleMap.addMarker(options);
}
}
@Override
public void onFailure(Call<List<Pin>> call, Throwable t) {
}
});
}
}
そして、ここではPinsApiInterface.java
です:
public interface PinsApiInterface {
@GET("/Pins.json")
void getStreams(Callback<List<Pin>> callback);
}
ああ、私私がミックスアップしたように見えません。改造と改造2。私の問題が今どこにあるかを見ます!それは私が持っていたエラーを修正するようだ。 onResponseコード内の "forループ"に間違っているものが原因でアプリケーションがまだクラッシュしているように見えますが、うまくいけば分かります。ありがとう! –