In PHP sollte die Variable $id einen ganzzahligen Wert vom Client erhalten. Wenn der Client jedoch den ID-Wert als Ganzzahl mit der POST-Anforderungsmethode an das PHP-Skript sendet, wird er beim Hochladen des Skripts auf den WAMP-Server automatisch in den String-Typ in PHP konvertiert. Wenn das Skript hingegen auf den Bluehost-Server hochgeladen wird, sind die ID-Werte immer noch Ganzzahlen und werden nicht in Zeichenfolgen konvertiert, was ich möchte.
Dies ist ein einfaches PHP-Skript:
<?php $id = $_POST["id"]; if (is_int($id)) echo "It is integer"; // It will print this if the PHP script was uploaded to the Bluehost server. else if (is_string($id)) echo "It is string"; // It will print this if the PHP script was uploaded to the WAMP server.
Der vom Client gesendete ID-Wert wird über die Android-Anwendung gesendet. So sende ich den ID-Wert an das PHP-Skript:
RetrofitManager-Klasse
public class RetrofitManager { private static RetrofitManager.Api api; public static RetrofitManager.Api getApi() { if (api == null) api = new Retrofit.Builder() .baseUrl("http://192.151.5.721/API/") .client(new OkHttpClient.Builder().readTimeout(3, TimeUnit.MINUTES).writeTimeout(3, TimeUnit.MINUTES).connectTimeout(25, TimeUnit.SECONDS).build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) .build() .create(Api.class); return api; } public interface Api { @FormUrlEncoded @POST("Countries/Get.php") Single<CountryModelResponse> getCountries(@Field("id") int countryId); } }
CountriesRepository-Klasse
public class CountriesRepository { public LiveData<Object> getCountries(Context context) { MutableLiveData<Object> mutableLiveData = new MutableLiveData<>(); PublishSubject<String> retrySubject = PublishSubject.create(); RetrofitManager.getApi().getCountries(Navigation.findNavController(MainActivity.activityMainBinding.activityMainFragmentContainerViewContainer).getPreviousBackStackEntry() == null ? SharedPreferencesManager.getIntegerValue(context, SharedPreferencesManager.Keys.COUNTRY_ID.name()) : -1) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnSubscribe(mutableLiveData::setValue) .doOnError(throwable -> { LinkedHashSet<Object> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add(!Utils.isInternetConnected(context) ? 100 : throwable instanceof SocketTimeoutException ? 200 : 300); linkedHashSet.add(retrySubject); mutableLiveData.setValue(linkedHashSet); }) .retryWhen(throwableFlowable -> throwableFlowable.flatMap(throwable -> retrySubject.toFlowable(BackpressureStrategy.DROP).take(1), (throwable, s) -> s)) .subscribe(countryModelResponse -> { if (countryModelResponse.getRequestStatus() == 100) mutableLiveData.setValue(countryModelResponse); else { LinkedHashSet<Object> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add(300); linkedHashSet.add(retrySubject); mutableLiveData.setValue(linkedHashSet); } }); return mutableLiveData; } }
Ich bin mir nicht sicher, warum dieser Verhaltensunterschied zwischen den beiden Servern auftritt.
Ich verwende die neueste Version des PHP- und WAMP-Servers.
所有通过 HTTP 的请求都作为字符串发送。我们必须根据我们的需要来铸造它。就你而言,行为很奇怪。尝试检查两端的PHP版本是否相同。