java - 使用 Retrofit 将 id 的 int 值转换为 String 时找不到资源
问题描述
我正在使用 Retrofit 获取数据并将其显示到屏幕上。我想通过他们的 id 搜索用户。我做了这样的界面:
@GET("/posts/{id}")
Call<postmodel> getUsersModel(@Path("id") int id);
问题出在 DetailActivity 第 52 行:
EndPointAccess access = APIClient.getRetrofit().create(EndPointAccess.class);
Call<postmodel> modelCall = access.getUsersModel(Integer.parseInt(_userinput));
这是 Logcat 报告:
android.content.res.Resources$NotFoundException:
String resource ID #0x1
at
android.content.res.Resources.getText(Resources.java:351)
at
android.content.res.MiuiResources.getText(MiuiResources.java:97)
at
android.widget.TextView.setText(TextView.java:4562)
at com.example.sahil.typicode1.Activity.DetailActivity$2.onResponse(DetailActivity.java:60)
APIClient.java
public static final String BASE_URL = "https://jsonplaceholder.typicode.com";
private static Retrofit retrofit = null;
public static Retrofit getRetrofit()
{
if (retrofit == null)
{
retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory
.create()).build();
}
return retrofit;
}
EndPointAccess.java(接口)
@GET("/posts/{id}")
Call<postmodel> getUsersModel(@Path("id") int id);
MainActivity.java
EditText userid;
Button search;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
userid = (EditText) findViewById(R.id.etuserid);
search = (Button) findViewById(R.id.btnsearch);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,DetailActivity.class);
intent.putExtra("STRING_I_NEED",userid.getText().toString());
startActivity(intent);
}
});
}
DetailActivity.java
TextView userid,usertitle,userbody;
Button viewall;
String _userinput;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
Intent intent = getIntent();
_userinput = intent.getStringExtra("STRING_I_NEED");
userid = (TextView) findViewById(R.id.textViewid);
usertitle = (TextView) findViewById(R.id.textViewtitle);
userbody = (TextView) findViewById(R.id.textViewbody);
viewall = (Button) findViewById(R.id.btnviewall);
viewall.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(DetailActivity.this, "Done!", Toast.LENGTH_SHORT).show();
}
});
getinfo();
}
private void getinfo()
{
EndPointAccess access = APIClient.getRetrofit().create(EndPointAccess.class);
Call<postmodel> modelCall = access.getUsersModel(Integer.parseInt(_userinput));
modelCall.enqueue(new Callback<postmodel>() {
@Override
public void onResponse(Call<postmodel> call, Response<postmodel> response)
{
userid.setText(response.body().getId());
usertitle.setText(response.body().getTitle());
userbody.setText(response.body().getBody());
}
@Override
public void onFailure(Call<postmodel> call, Throwable t) {
Toast.makeText(DetailActivity.this, "Error!", Toast.LENGTH_SHORT).show();
}
});
}
postmodel.java (pojo 类)
private int id;
private String title;
private String body;
public postmodel(int id, String title, String body) {
this.id = id;
this.title = title;
this.body = body;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
解决方案
您正在尝试在仅接受字符串值的 setText 函数中设置一个整数。因此它给出了这个错误。因此,您需要使用 String.valueOf() 函数将其转换为字符串。
删除userid.setText(response.body().getId());
添加 userid.setText(String.valueOf(response.body().getId()));
推荐阅读
- django - Django - 查询对象列表的平均评级的最有效方法是什么?
- prolog - 具体化 call_with_time_limit / call_with_inference_limit
- python - 使用 Pandas 数据框和 Matplotlib 生成平滑线
- excel - 一排单元格包含通过和失败需要一个公式来确定真正的通过或失败
- reactjs - bit-src 没有显示 react bootstrap 的风格
- google-apps-script - 如何使用公式从单元格中获取值?
- c# - 强制 nuget 忽略目标框架冲突的包
- python - python 3.7中的self和/是什么意思?
- typescript - 如何根据高阶函数的静态字符串值推断类型?
- python - 使用带有 SNS 和 EMR 客户端的 lambda 中的 boto3 来获取集群的详细信息并将其发送到邮件