【问题标题】:response is not getting in retrofit 2 in androidandroid 的改造 2 中没有响应
【发布时间】:2019-07-19 07:48:28
【问题描述】:

java.lang.IllegalStateException:应为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT 对于下面的代码,我收到了错误。 在此之前我收到了套接字超时错误为此我添加了计时器。

响应没有到来。每次只执行失败条件。任何人都可以帮助我在哪里出错

    OnOFF.setOnToggledListener (new OnToggledListener ( ) {
            @Override
            public void onSwitched(LabeledSwitch labeledSwitch, boolean isOn) {

                String lightID="";
                String lightType="";
                String level="";
                String Status="";

                if(isOn) {

                    final ProgressDialog progressDialog = new ProgressDialog (getActivity ());
                    progressDialog.setIndeterminate(true);
                    progressDialog.setMessage("Authenticating...");
                    progressDialog.setCanceledOnTouchOutside(false);
                    progressDialog.setCancelable(false);
                    progressDialog.show();

                    OkHttpClient client = new OkHttpClient.Builder()
                            .connectTimeout(10, TimeUnit.SECONDS)
                            .writeTimeout(10, TimeUnit.SECONDS)
                            .readTimeout(30, TimeUnit.SECONDS)
                            .build();

                    Retrofit retrofit = new Retrofit.Builder()
                            .baseUrl(API.URL_BASE)
                            .addConverterFactory(ScalarsConverterFactory.create())
                            .addConverterFactory(GsonConverterFactory.create())
                            .client (client)
                            .build();


                    API service = retrofit.create (API.class);
                    lightID = "1234";
                    lightType = "1";
                    level = "5";


                    try {
                        if (OnOFF.isOn ( )) {
                            Status = "1";

                        } else {
                            Status = "0";
                        }
                        JSONObject parmobject = new JSONObject ( );
                        parmobject.put ("Status", Status);
                        parmobject.put ("lightID", lightID);
                        parmobject.put ("lightType", lightType);
                        parmobject.put ("level", level);
                        Call<OnOffStatusList> userCall = service.getMyJSON (parmobject.toString ());
                        userCall.enqueue(new Callback<OnOffStatusList> () {

                            @Override
                            public void onResponse(Call <OnOffStatusList> call, Response <OnOffStatusList> response) {
                                if(response!=null && response.code ()==200){
                                    Log.d("Call request", call.request().toString());
                                    Log.d("Call request header", call.request().headers().toString());
                                    Log.d("Response raw header", response.headers().toString());
                                    Log.d("Response raw", String.valueOf(response.raw().body()));
                                    Log.d("Response code", String.valueOf(response.code()));

                                    if(response.isSuccessful()) {
                                        //the response-body is already parseable to your ResponseBody object
                                        Log.d("Call request", call.request().toString());
                                        Log.d("Call request header", call.request().headers().toString());

                                        Log.d("Response raw header", response.headers().toString());
                                        Log.d("Response raw", String.valueOf(response.raw().body()));
                                        Log.d("Response code", String.valueOf(response.code()));

                                        if(response.isSuccessful()) {
                                            String Status=new Gson().toJson(response.body());
                                            Log.d("Status", Status);
                                            luminary.setImageDrawable (ContextCompat.getDrawable (getContext ( ), R.drawable.luminaryon));

                                        }

                                        else  {
                                            Log.d("Response errorBody", String.valueOf(response.errorBody()));
                                        }
                                    }



                                    System.out.println(response.body ());
                                }




                            }

                            @Override
                            public void onFailure(Call<OnOffStatusList> call, Throwable t) {
                                System.out.println("onFailure");
                                System.out.println(t.fillInStackTrace());
                                Toast.makeText(getActivity (), "Some error occurred -> ", Toast.LENGTH_LONG).show();;
                                // progressDialog.dismiss();



                            }

                        });
                    }

                    catch (JSONException e) {
                        e.printStackTrace ( );

                    }
                    return;
                    }

            }

        });

OnOffStatusList.java:

公共类 OnOffStatusList {

@SerializedName("status")
private List <Status> status;

public List<Status> getStatus() {
    return status;
}

public void setStatus(List<Status> status) {

    this.status = status;
}

}

Status.java:

公开课状态{

@SerializedName("id")
private String id;
@SerializedName("status")
private Integer status;
@SerializedName("val")
private String val;

public String getVal() {
    return val;
}

public void setVal(String val) {
    this.val = val;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public Integer getStatus() {
    return status;
}

public void setStatus(Integer status) {
    this.status = status;
}

}

【问题讨论】:

  • 所有的cmets都去哪儿了?

标签: android retrofit2


【解决方案1】:

在所有项目中(全局)使用相同的改造实例,不要每次都初始化它:

将此添加到您的 Activity 或 Application 类中:

final API service;
public API getAPI(){

    if(service == null) {
        final Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(API.URL_BASE)
                .addConverterFactory(ScalarsConverterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        service = retrofit.create(API.class);
    }
    return service;
}

调用它 getAPI() 来调用 API:

    OnOFF.setOnToggledListener (new OnToggledListener ( ) {
        @Override
        public void onSwitched(LabeledSwitch labeledSwitch, boolean isOn) {

            String lightID="";
            String lightType="";
            String level="";
            String Status="";

            if(isOn) {

                final ProgressDialog progressDialog = new ProgressDialog (getActivity ());
                progressDialog.setIndeterminate(true);
                progressDialog.setMessage("Authenticating...");
                progressDialog.setCanceledOnTouchOutside(false);
                progressDialog.setCancelable(false);
                progressDialog.show();


                lightID = "1234";
                lightType = "1";
                level = "5";
                List<OnOffStatusList> onOffStatusListList=new ArrayList <> ();

                try {
                    if (OnOFF.isOn ( )) {
                        Status = "1";

                    } else {
                        Status = "0";
                    }
                    JSONObject parmobject = new JSONObject ( );
                    parmobject.put ("Status", Status);
                    parmobject.put ("lightID", lightID);
                    parmobject.put ("lightType", lightType);
                    parmobject.put ("level", level);
                    Call<List<OnOffStatusList>> userCall = getAPI().getMyJSON (parmobject.toString ());
                    userCall.enqueue(new Callback<List<OnOffStatusList>> () {
                        @Override
                        public void onResponse(Call<List<OnOffStatusList>> userCall, Response<List<OnOffStatusList>> response) {
                            Log.d ("response",response.body ().toString ());
                            if (response != null && response.code ()==200) {

                                Integer status=onoffStatusList.get (1).getStatus();
                                String val=onoffStatusList.get (2).getVal();
                                if(status==1) {
                                    luminary.setImageDrawable (ContextCompat.getDrawable (getContext ( ), R.drawable.luminaryon));
                                }
                                else {
                                    luminary.setImageDrawable (ContextCompat.getDrawable (getContext ( ), R.drawable.luminaryoff));
                                }
                            }

                        }

                        @Override
                        public void onFailure(Call<List<OnOffStatusList>> call, Throwable t) {
                            // Toast.makeText(LoginActivity.this, "Some error occurred -> ", Toast.LENGTH_LONG).show();;
                            // dialog.dismiss();

                        }

                    });
                } catch (JSONException e) {
                    e.printStackTrace ( );
                }
            }
        }
    });

【讨论】:

  • 给我解决方案
【解决方案2】:

调用失败有3个问题

  • 也许模型没有像响应一样的变量
  • API 连接时间过长
  • 响应不是 json(有时来自服务器的字符串警告作为响应)

【讨论】:

  • 查看我的模型类
猜你喜欢
  • 2018-03-21
  • 2016-09-13
  • 1970-01-01
  • 2020-06-02
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
相关资源
最近更新 更多