首页 > 解决方案 > 使用 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;
}

标签: javaandroidrestapiretrofit2

解决方案


您正在尝试在仅接受字符串值的 setText 函数中设置一个整数。因此它给出了这个错误。因此,您需要使用 String.valueOf() 函数将其转换为字符串。

删除userid.setText(response.body().getId());
添加 userid.setText(String.valueOf(response.body().getId()));


推荐阅读