Retrofit onFailure但返回http

问题描述 投票:0回答:1

我正在编码一种从数据库返回1条记录的方法,我有一种类似的方法可以返回所有记录,并且可以正常工作,但是在返回1条记录时会失败!

public class UpdateIssueActivity extends AppCompatActivity {
IssueModel mIssuesList;
ImageView imgView;
ApiInterface apiInterface;

private static final String TAG = "UpdateIssueActivity";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_update_issue);
    Log.d(TAG, "got into UpdateIssueActivity");


    int Id = getIntent().getIntExtra("IssueId", 0);

    apiInterface = ApiClient.getClient().create(ApiInterface.class);
    Call<IssueModel> call = apiInterface.GetIssue(Id);

    call.enqueue(new Callback<IssueModel>() {
        @Override
        public void onResponse(@NonNull Call<IssueModel> call, @NonNull Response<IssueModel> response) {
            if (response.isSuccessful()) {
                Log.d(TAG, "got inside onResponse");
            }
            else {
                    Toast.makeText(UpdateIssueActivity.this, "Failure while requesting token", Toast.LENGTH_LONG).show();
                    Log.d("RequestTokenCallback", "Code: " + response.code() + "Message: " + response.message());
            }
        }

        @Override
        public void onFailure(Call<IssueModel> call, Throwable t) {
                Toast.makeText(UpdateIssueActivity.this, "onFailure", Toast.LENGTH_SHORT).show();
                Log.d(TAG, "inside onFailure");
        }
    });

}
}

这是模型

public class IssueModel {
@SerializedName("issueId")
@Expose
private int issueId;
@SerializedName("issueName")
@Expose
private String issueName;

@SerializedName("issueDescription")
@Expose
private String issueDescription;

@SerializedName("issuePhoto")
@Expose
private String issuePhoto;

@SerializedName("issueDate")
@Expose

private String issueDate;


@SerializedName("issuePriority")
@Expose
private int issuePriority;

@SerializedName("issueOwner")
@Expose
private String issueOwner;

@SerializedName("issueSite")
@Expose
private String issueSite;

@SerializedName("issueProject")
@Expose
private String issueProject;

@SerializedName("issueStatus")
@Expose
private int issueStatus;

@SerializedName("issueSolverId")
@Expose
private int issueSolverId;

@SerializedName("issueSolveDate")
@Expose
private Date issueSolveDate;

@SerializedName("Response")
private String Response;


public int getIssueId() {
    return issueId;
}
public void setIssueId(int issueId) {
    this.issueId = issueId;
}

public String getIssueName() {
    return issueName;
}
public void setIssueName(String issueName) {
    this.issueName = issueName;
}

public String getIssueDescription() {
    return issueDescription;
}
public void setIssueDescription(String issueDescription) {
    this.issueDescription = issueDescription;
}

public String getIssuePhoto() {
    return issuePhoto;
}
public void setIssuePhoto(String issuePhoto) {
    this.issuePhoto = issuePhoto;
}

public String getIssueDate(){ return issueDate;}


public int getIssuePriority() {
    return issuePriority;
}
public void setIssuePriority(int issuePriority) {
    this.issuePriority = issuePriority;
}

public String getIssueOwner() {
    return issueOwner;
}
public void setIssueOwner(String issueOwner) {
    this.issueOwner = issueOwner;
}

public String getIssueSite() {
    return issueSite;
}
public void setIssueSite(String issueSite) {
    this.issueSite = issueSite;
}

public String getIssueProject() {
    return issueProject;
}
public void setIssueProject(String issueProject) {
    this.issueProject = issueProject;
}

public int getIssueStatus() {
    return issueStatus;
}
public void setIssueStatus(int issueStatus) {
    this.issueStatus = issueStatus;
}

public int getIssueSolverId() {
    return issueSolverId;
}
public void setIssueSolverId(int issueSolverId) {
    this.issueSolverId = issueSolverId;
}

public Date getIssueSolveDate() {
    return issueSolveDate;
}
public void setIssueSolveDate(Date issueSolveDate) {
    this.issueSolveDate = issueSolveDate;
}

public String getResponse() { return Response;  }
public void setResponse(String response) { Response = response;  }

这是ApiInterface

@GET("get_issue.php")
Call<IssueModel> GetIssue(@Query("issue_id") int Id);

这是ApiClient

public static final String Base_Url="http://192.168.8.102:80/flown_app/api/";
private static Retrofit retrofit = null;
private static Gson gson = new GsonBuilder()
        .setDateFormat("yyyy-MM-dd hh:mm:ss")
        .setLenient()
        .create();

public static Retrofit getClient() {

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

    retrofit = new Retrofit.Builder()
            .baseUrl(Base_Url)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .client(client)
            .build();

    return retrofit;
}

我收到此回复

D/IssueAdapter: StartActivity Called
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@f49d7c2
D/UpdateIssueActivity: got into UpdateIssueActivity
D/OkHttp: --> GET http://192.168.8.102/flown_app/api/get_issue.php?issue_id=1
    --> END GET
D/OkHttp: <-- 200 OK http://192.168.8.102/flown_app/api/get_issue.php?issue_id=1 (16ms)
    Date: Tue, 14 Jan 2020 05:34:52 GMT
    Server: Apache/2.4.41 (Win64) OpenSSL/1.0.2s PHP/7.1.33
    X-Powered-By: PHP/7.1.33
    Content-Length: 239
    Keep-Alive: timeout=5, max=100
    Connection: Keep-Alive
    Content-Type: text/html; charset=UTF-8
D/OkHttp: [{"issueId":"1","issueOwner":"Mohammed","issueSite":"test1","issueProject":"Test Project","issueName":"test 1","issueDescription":"test 1 on postman","issueStatus":"1","issuePriority":"1","issueDate":"2019-12-23 09:22:20","issuePhoto":""}]
    <-- END HTTP (239-byte body)
D/EGL_emulation: eglMakeCurrent: 0xe86f1480: ver 2 0 (tinfo 0xee831f80)
D/UpdateIssueActivity: inside onFailure
retrofit2
1个回答
0
投票

调试时显示它转到

onFailure(Call<IssueModel> call, Throwable t)

我添加了

t.printStackTrace();

因此显示此错误

    java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

我在使用JSON时遇到问题,因为android将它作为数组接收,当我从服务器端将其更改为JSON对象时,它可以正常工作

© www.soinside.com 2019 - 2024. All rights reserved.