iT邦幫忙

0

Android使用Retrofit API遇到資料問題

  • 分享至 

  • xImage

大家好,我最近依然在Android上使用Retrofit API抓取Json時,遇到底下這個問題:
https://ithelp.ithome.com.tw/upload/images/20220127/20140126X9zVjocuF0.jpg
這個是API的規格:
https://ithelp.ithome.com.tw/upload/images/20220127/20140126BMAC9mTj8G.jpg
Postman有回傳一個數字給我,但我在Android上不知道要怎麼取得這個數字
這邊是我的程式碼:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://10.25.7.167:62678/") 
                .addConverterFactory(GsonConverterFactory.create())  
                .build();
        ApiGet apiGet =retrofit.create(ApiGet.class);
        Call<test> call = apiGet.getPost();
        call.enqueue(new Callback<test>() {
            @Override
            public void onResponse(Call<test> call, Response<test> response) {
                Log.d("API","是:"+response.body().getInteger());
            }

            @Override
            public void onFailure(Call<test> call, Throwable t) {
                Log.d("API","Fail:"+t.toString());
            }
        });
    }
    public interface ApiGet{
        @GET("api/Commodity/GetIdCommodityByIdCommodityDetail?idCommodityDetail=3474")
        Call<test> getPost();
    }
    public class test{
        private int integer;

        public int getInteger() {
            return integer;
        }

        public void setInteger(int integer) {
            this.integer = integer;
        }
    }
}

會出這個錯誤

D/API: Fail:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was NUMBER at line 1 column 5 path $
看更多先前的討論...收起先前的討論...
Call<test> call = apiGet.getPost();
這一段有問題 apiGet.getPost()-> 這邊回來的值是一個int的數值
但你用一個物件接收它,所以compiler會錯
方法請參考下方
更單純的方法,因為只會回傳一個數字
Call<int> call = apiGet.getPost();
那就直接int接收就好了
除非回來的資料是一個物件或字典在做封裝就好
你的方法針對的解析方式是json 對象是 => {"integer":4}
那如果你要僅取得數字的話可用樓上得
Call<integer> call = apiGet.getPost();
或是
Call<String> call = apiGet.getPost();
取得網頁上的內容
改成這樣應該就可以取得了
Call<Integer> call = apiGet.getPost();
call.enqueue(new Callback<Integer>() {
@Override
public void onResponse(Call<Integer> call, Response<Integer> response) {
Log.e("he", "onResponse: " + response.body().byteValue() );
}
@Override
public void onFailure(Call<Integer> call, Throwable t) {

}
});
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2022-01-27 15:30:00
最佳解答

我看不懂
你自己試試看

Retrofit.Builder()
        .baseUrl("<base url>") 
        .client(client)
        .addConverterFactory(ScalarsConverterFactory.create())
        .addConverterFactory(GsonConverterFactory.create(gson))
        .build()

資料來源

感謝! 那篇資料來源解決我的問題了

我要發表回答

立即登入回答