当前位置: 首页 > 知识库问答 >
问题:

API PHP查询正确,但将空返回给Android客户端

鲁德佑
2023-03-14

我有下面的应用程序,可以在php中与api进行通信。

我正在使用改装来完成它,使用GET方法,我发送一个int,通过该int返回项目。

MySQL表系列:

id

Mysql表集:

id
f_id (Foreign key to Series) .

活动正在加载系列项目,单击时,它会将系列id发送到GET,并返回项目,但问题是,它记录了一个错误,但在Mysql端,查询是正确的。

例如,它将“1”作为序列id发送,结果是(我使用echo$query进行检查):

SELECT * FROM Episodes WHERE Episodes.series_f_key= 1 ORDER BY Episodes.id DESC {"MyDatabase":[{"id":"1","title":"1","image":"TestImge.jpg","link":"https://www.youtube.com/watch?v=uzgp65UnPxA","series":"\u062a\u062c\u0631\u0628\u0629","series_f_key":"1"}]}

没错,但在Android客户端,它说:

 com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 3 column 1 path $

此外,我正在发送一个阿拉伯语查询,同样的问题也在发生,查询是正确的,“echo$query”响应如下:

{"MyDatabase":[{"id":"1","title":"\u062a\u062c\u0631\u0628\u0629","image":"Test.jpg","country":"\u0633\u0648\u0631\u064a\u0627"}]}

Android客户端:

 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 3 column 2 path $

其他GET工作正常,只有这些会导致问题。

改装代码:

 private void MakeConnection(final EpisodesAdapter Adapter,int id){
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    ReApi Api = retrofit.create(ReApi.class);

    Connection = Api.GetEpisodes(id);


    Connection.enqueue(new Callback<Model>() {
        @Override
        public void onResponse(Call<Model> call, Response<Model> response) {


            List<EpisodeItem> LatestItems = response.body().GetList();
            for (int i = 0; i < LatestItems.size(); i++) {

                if (Items == null)
                    Items = new ArrayList<>();

                Items.add(LatestItems.get(i));

            }

            Adapter.notifyDataSetChanged();

        }


        @Override
        public void onFailure(Call<Model> call, Throwable t) {

            Toast.makeText(EpisodesActivity.this, getResources().getString(R.string.couldnotfindanything), Toast.LENGTH_LONG).show();
            t.printStackTrace();

        }


    });
}

   private interface ReApi{

    @GET("myapitest.php")
    Call<Model> GetEpisodes(@Query("getbyid")int id);


}

private class Model{
    private List<EpisodeItem> MyDatabase;

    public List<EpisodeItem> GetList() {
        return MyDatabase;
    }

    public void SetList(List<EpisodeItem> rt) {
        this.MyDatabase= rt;
    }

}

型号类别:

private int id;
private String title;
private String link;
private String image;
private String series;

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 getLink() {
    return link;
}

public void setLink(String link) {
    this.link = link;
}

public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image = image;
}

public String getSeries() {
    return series;
}

public void setSeries(String series) {
    this.series = series;
}

请求示例:

200 OK http://www.syriantc.com/ApiTest/apifile.php?getbyepisode=1 (313ms)
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Date: Tue,     07 Jun 2016 06:33:46 GMT
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Server:     Apache/2.4.18
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: X-Powered-By: PHP/5.4.45
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Vary: Accept-Encoding,User-Agent
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Keep-Alive: timeout=5
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Connection: Keep-Alive
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: Content-Type: text/html
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: OkHttp-Sent-Millis: 1465281228946
06-07 09:33:49.107 29654-29863/com.abohani.test D/OkHttp: OkHttp-Received-Millis: 1465281229106
06-07 09:33:49.108 29654-29863/com.abohani.test D/OkHttp:  
06-07 09:33:49.108 29654-29863/com.abohani.test D/OkHttp: SELECT * FROM Episodes WHERE Episodes.series_f_key= 1 ORDER BY Episodes.id DESC
06-07 09:33:49.108 29654-29863/com.abohani.test D/OkHttp: {"MyDatabase":[{"id":"1","title":"1","image":"Test.jpg","link":"https://drive.google.com/file/d/0B8UrrDgeyvYJMXdtMXdYeEFnLVU/view","series":"\u062a\u062c\u0631\u0628\u0    629","series_f_key":"1"}]}
06-07 09:33:49.108 29654-29863/com.abohani.test D/OkHttp: <-- END HTTP (284-byte body)

共有2个答案

韩佐
2023-03-14

您的异常消息似乎在告诉您要做什么:

Use JsonReader.setLenient(true) 

此外,此消息告诉您需要更改JSON解析,因为它需要一个对象,但需要一个数组

 Expected BEGIN_OBJECT but was BEGIN_ARRAY

您的示例JSON如下所示:{code>{“MyDatabase”:[{“id”:“。您似乎没有考虑序列化中键为“MyDatabase”的外部对象。您可以为MyDatabase添加另一个模型类,然后该类包含事件项列表。

施自怡
2023-03-14

莱文是正确的。我想添加一个引用和更多信息。

这个链接进一步解释。问题是您的json对象存在某种问题,但它被认为是正确的。通常结尾的空格会导致这种情况。

 类似资料:
  • 因此,我正在构建一个云函数,它接受customerID,根据customerID过滤文档,并返回文档列表。遗憾的是,它返回一个空数组。我相信这是一个简单的解决办法。 以下是云功能: 下面是我从客户端调用它时的代码。 此外,这里是一个萤火虫的屏幕截图。 firestore的截图

  • 以下是我的疑问.... 我没有结果。 另外,我正在使用这个插件来生成请求正文。 我的查询如下所示.. null 感谢您到目前为止的阅读,如果有人能帮助我找出如何使这一工作,我将非常感谢。

  • 我正在使用java Vert.x项目,并使用Vert.x官方文档的指南,使用反应式MySQL客户端连接到MySQL。当我试图从< code>SELECT查询中检索数据时,它总是给出空结果,即使数据库中有数据。下面给出了用来检索数据的方法。 上述方法的连接属性为: 该方法不显示任何错误,但始终给出o结果,并显示< code>logger.error("没有id的数据参考号:" id ");。这是什么

  • 我正在尝试从我的应用打开Gmail(点击按钮)。我只在Android11中面临这个问题。这不是打开Gmail。在本例中,QueryInputActivities返回空列表。 请帮助我解决android 11的这个问题。下面是我正在使用的代码。。

  • 设备:Emulator pixel 3a-Android11 代码: 使用时: listCam大小为0 当切换到: listCam大小是1-因为它应该是。 使用以下代码: 工作正常,并显示相机应用程序。 你知道为什么queryIntentActivities没有返回摄像机的意图吗? 谢谢!

  • 问题内容: 我需要在node.js中用猫鼬返回查询的结果。 如何返回值以将值设置为变量? 我需要做的是: 为了有: 非常感谢您的回复 。 我还有另一个问题。 如何使用find或findOne在查询运算符中传递变量?喜欢 : 问题答案: 有几种方法可以实现您想要的。 1.使用猫鼬查询 在这种策略中,您的函数返回一个Mongoose查询,您以后可以使用它来调用该方法并使用它来获取结果。 然后,您可以简