在改造中调用 api 时响应消息未找到和响应代码 404
Posted
技术标签:
【中文标题】在改造中调用 api 时响应消息未找到和响应代码 404【英文标题】:Response Message-Not Found and Response code-404 while calling the api in retrofit 【发布时间】:2018-01-27 22:35:45 【问题描述】:从数据库中获取数据的Web服务如下:
Smart.php
定义('主机','本地主机'); 定义(“用户”,“根”); 定义(“通过”,“根”); 定义('DB','螺柱'); $con = mysqli_connect(HOST,USER,PASS,DB); $sql = "从学生中选择 *"; $结果=数组(); $res = mysqli_query($con,$sql); 在此处输入代码 而($row = mysqli_fetch_array($res)) array_push($结果, 数组('id'=>$row[0], '名称'=>$行[1], '地址'=>$行[2] )); echo json_encode(array("result"=>$result)); mysqli_close($con); ?>android程序如下:
MainActivity.java
public class MainActivity extends AppCompatActivity
public static final String BASE_URL = "http://localhost:80/Projecr/";
ApiServices as;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findViewById(R.id.text);
Button btn=(Button)findViewById(R.id.btn);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
as=retrofit.create(ApiServices.class);
btn.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
load();
);
private void load()
try
Call<Example> call = as.List();
call.enqueue(new Callback<Example>()
@Override
public void onResponse(Call<Example> call, Response<Example> response)
// int statusCode = response.code();
if(!response.isSuccessful())
Log.e("API not success",response.toString()+response.message()+response.errorBody()+response.code());
Example e = response.body();
if (e == null)
Toast.makeText(getApplicationContext(), "Null", Toast.LENGTH_LONG).show();
else
Toast.makeText(MainActivity.this, "Not Null", Toast.LENGTH_LONG).show();
@Override
public void onFailure(Call<Example> call, Throwable t)
Log.e("Failed","t.printStackTrace()"+t.getCause()+t.getMessage());
tv.setText("Failure");
);
catch (Exception e)
String TAG="tag";
Log.e(TAG, e.getMessage());
Example.java
public class Example
@SerializedName("result")
@Expose
private List<Result> result = null;
public List<Result> getResult()
return result;
public void setResult(List<Result> result)
this.result = result;
Result.java
public class Result
@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("address")
@Expose
private String address;
public String getId()
return id;
public void setId(String id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getAddress()
return address;
public void setAddress(String address)
this.address = address;
ApiServices.java接口
public interface ApiServices
@GET("Smart.php")
Call<Example> List();
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation="vertical"
tools:context="com.example.saloni.retrofit_sample.MainActivity">
<TextView
android:layout_
android:layout_
android:textSize="15dp"
android:id="@+id/text" />
<Button
android:layout_
android:layout_
android:id="@+id/btn"
android:text="click"
/>
</LinearLayout>
当我运行这个程序时,点击按钮,我得到 toast null 并且 logcat 输出如下:
E/API 不成功:retrofit2.Response@d45de1e Not Found okhttp3.ResponseBody$1@9a0e6ff 404
这意味着响应消息是“未找到”,响应代码是“404”。
按照建议编辑程序并删除“/”后,logcat中出现以下错误:
E/失败:t.printStackTrace()java.lang.UnsupportedOperationException:无法实例化接口!接口名称:javax.xml.transform.Result 无法为接口 javax.xml.transform.Result 调用无参数构造函数。向 Gson 注册此类型的 InstanceCreator 可能会解决此问题。
【问题讨论】:
【参考方案1】:public interface ApiServices
@GET("/Smart.php")
Call<List<Result>> List();
而不是
public interface ApiServices
@GET("Smart.php")
Call<List<Result>> List();
【讨论】:
应用您的建议并编辑代码后,它给出了另一个错误,如帖子中编辑的那样。请进一步指导我 这不是代码问题检查你的 json 响应我认为你得到 List我成功解决了这个错误,没有任何进一步的错误。我的 Result.java 类与 javax.xml.transform.Result 类冲突。所以我重命名了我的 Result.java 类
【讨论】:
以上是关于在改造中调用 api 时响应消息未找到和响应代码 404的主要内容,如果未能解决你的问题,请参考以下文章
改造 2 POST JSON 对象,响应给出错误代码 400,消息 = nul
我们正在尝试调用api,我们得到了所有响应,但它们未显示在文本视图上