我试图了解如何使用改造库,所以我创建了一个Android项目和一个简单的PHP脚本。我的index.php文件位置是xampp的htdocs目录。
这是我的php脚本,这里我只想在脚本执行时返回一个字符串
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php
echo "Success";
?>
</body>
</html>
在Android部分我想发送GET请求
@GET("/")
Call<String> test();
在这里,我发送回复并做必要的准备工作
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.43.169:80/")
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
IDataSyncApi dataSyncApi = retrofit.create(IDataSyncApi.class);
Callback<String> callback = new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
String responseStr = gson.fromJson(response.body().toString(), String.class);
Log.d("RESPONSE", responseStr);
}
@Override
public void onFailure(Call<String> call, Throwable t) {
}
};
Call<String> response = dataSyncApi.test();
response.enqueue(callback);
问题在于,响应者的身体总是等于&#34;&lt; html&gt;&#34;。我究竟做错了什么?
更新1
我尝试使用维基百科公共API代替我的,结果是一样的。 我得到了#34;&#34;
@GET("/w/api.php")
Call<String> test(@QueryMap Map<String, String> argsMap);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://en.wikipedia.org/")
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
Map<String, String> args = new HashMap<String, String>();
args.put("action", "query");
args.put("meta", "siteinfo");
args.put("siprop", "namespaces");
Call<String> response = dataSyncApi.test(args);
response.enqueue(callback);
答案 0 :(得分:1)
我自己想通了。问题是我使用String作为Call类的类型(Call<String>
)。相反,最好使用Call<ResponseBody>
,所以它变成这样:
服务
@GET("/w/api.php")
Call<ResponseBody> test(@QueryMap Map<String, String> argsMap);
提出请求
Call<ResponseBody> response = dataSyncApi.test(args);
response.enqueue(callback);
答案 1 :(得分:1)
您可以使用ResponseBody Type。如下所示:
@Multipart
@POST("/android_upload_file/uploadfile.php")
Call<ResponseBody> upload(@Part("fileName") String des, @Part("file\"; filename=\"1.txt\"")RequestBody file);
答案 2 :(得分:0)
您已将响应作为Response<String> response
中的字符串。您尝试使用gson对其进行反序列化,这对于jsons而非html。
如果仍然无法正常工作,请尝试使用HttpLoggingInterceptor记录响应。
答案 3 :(得分:0)
您确定要求正确的PHP文档吗? 它可能是XAMPP缓存文件或提供另一个文件,如index.html?
或者,我会更改PHP文件以使用JSON进行响应,并在您的Retrofit调用中添加requestHeader以接受JSON(或HTML,具体取决于您的期望)