快速 API 错误:预期 BEGIN_ARRAY 但 BEGIN_OBJECT 在第 1 行第 2 列 PATH $ 通过使用改造

Posted

技术标签:

【中文标题】快速 API 错误:预期 BEGIN_ARRAY 但 BEGIN_OBJECT 在第 1 行第 2 列 PATH $ 通过使用改造【英文标题】:RAPID API ERROR: EXPECTED BEGIN_ARRAY BUT WAS BEGIN_OBJECT AT LINE 1 COLUMN 2 PATH $ BY USING RETROFIT 【发布时间】:2021-02-28 11:23:30 【问题描述】:

我正在将 Covid Tracker Rapid API 用于食谱应用项目。尝试向 Rapid API 发出 GET 请求时会出现此问题。错误显示预期的开始数组,但在第 1 行第 2 列路径 $

处开始对象

这是我的改造API Class

public interface Api 

    String BASE_URL = "https://who-covid-19-data.p.rapidapi.com/api/data/";


    @GET("names")
    Call < List < Model > > modelData( @Header("X-RapidAPI-Host") String api,
                                       @Header("X-RapidAPI-Key") String apiKey );

这是我的模型类

public class Model 

    String names;

    public Model ( String names ) 
        this.names = names;
    

    public String getNames () 
        return names;
    

    public void setNames ( String names ) 
        this.names = names;
    

这是我的主要活动课

public class MainActivity extends AppCompatActivity 
    TextView textView;

    @Override
    protected void onCreate ( Bundle savedInstanceState ) 
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_main );
        textView=findViewById ( R.id.txtHell );
        
        loadData();
    

    private void loadData () 

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Api.BASE_URL)
                .addConverterFactory( GsonConverterFactory.create())
                .addConverterFactory ( ScalarsConverterFactory.create () )
                .build();

        Api api = retrofit.create(Api.class);

        Call < List < Model > > call=api.modelData ("","");
        call.enqueue ( new Callback < List < Model > > ( ) 
            @Override
            public void onResponse ( Call < List < Model > > call , Response < List < Model > > response ) 

                if(!response.isSuccessful ())
                    textView.setText ( "Code"+response.code () );
                else
                    List<Model> models=response.body ();
                    for(Model model:models)
                        String data="";
                        data +="Names :"+ model.getNames ();

                        textView.append (data  );
                    
                
            

            @Override
            public void onFailure ( Call < List < Model > > call , Throwable t ) 
                textView.setText ( t.getMessage () );
            
         );
    

请帮帮我

【问题讨论】:

您的回复,必须用 [] 而非 包裹,如果您使用 php,请将 json_decode(data) 替换为 print_r(data) 【参考方案1】:

API 和 RapidAPI 一切都很好。我相信您只需要像这样更改界面即可。

@GET("names")
Call <ListModel> modelData( @Header("X-RapidAPI-Host") String api,
                            @Header("X-RapidAPI-Key") String apiKey );

【讨论】:

以上是关于快速 API 错误:预期 BEGIN_ARRAY 但 BEGIN_OBJECT 在第 1 行第 2 列 PATH $ 通过使用改造的主要内容,如果未能解决你的问题,请参考以下文章

获得错误预期BEGIN_ARRAY但在第1行第2列路径$是BEGIN_OBJECT

预期 BEGIN_OBJECT 但在 Kotlin 中使用 Gson 是 BEGIN_ARRAY”

如何解决“预期的BEGIN_ARRAY但是在第1行第1列路径的STRING”[关闭]

预期为BEGIN_ARRAY,但被BEGIN_OBJECT进行了翻新

预期为 BEGIN_ARRAY,但在第 1 行第 2 列改造时为 BEGIN_OBJECT2

java.lang.illegalstateException:预期BEGIN_OBJECT但是BEGIN_ARRAY Retrofit