«java.lang.IllegalStateException:应为 BEGIN_ARRAY 但在第 2 行第 1 列路径 $» 中为 STRING Kotlin 错误

«java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 2 column 1 path $» Kotlin error

你好,我正在尝试调用我自己使用 Slim4 制作的 Web 服务(使用 Retrofit),但是它给了我同样的错误。我已经来回尝试了许多在其他线程上找到的解决方案,但是 none 仍然有效。

这是我获取 Slim 4 和 NOTORM 库的终点

$app->get('/api/anuncios', function ($request, $response) {
    require_once('db/dbconnection.php');
    foreach($db->anuncios()
    
            as $row){
                $data[] = $row;
            }
            echo json_encode($data, JSON_UNESCAPED_UNICODE);
            return $response;
    
});

这些是我在 Android Studio 上的端点(我现在只尝试第一个)

interface EndPoints {



    @GET("/RoomForStudents/api/anuncios/")
    fun getAnuncios(): Call<List<Anuncio>>

   /** @GET("/api/anuncios/{id}")
    fun getAnunciosById(@Path("id") id: Int): Call<Anuncio>*/
}

我的 ServiceBuilder(我已经添加了 gson,以解决另一个错误,关于 JSON 格式错误)

object ServiceBuilder {

   private val gson = GsonBuilder().setLenient().create()


    private val client = OkHttpClient.Builder().build()

    private val retrofit = Retrofit.Builder()
        /**.baseUrl("https://tneveda.000webhostapp.com/")*/
        .baseUrl("https://tneveda.000webhostapp.com/")
        .addConverterFactory(GsonConverterFactory.create(gson))
        .client(client)
        .build()

    fun<T> buildService(service: Class<T>): T {
        return retrofit.create(service)
    }
}

我认为问题出在我的 webService 中读取的数据格式上,因为我用这个 Dummy Data https://jsonplaceholder.typicode.com/users 进行了测试并且它有效,但是对于我的 WebService 的数据它不起作用,但是我很难找到解决方案

谢谢

只是为了添加我的网络服务的获取端点的结果 https://tneveda.000webhostapp.com/RoomForStudents/api/anuncios

编辑

在邮递员上注意到,在使用我的端点后,我在 html 中得到了响应,并添加了这是 PHP 文件,端点带有 SLIM/NOTORM ''' header("Content-Type: application/json; 字符集=UTF-8"); ''' 也将 JSON_UNESCAPED_UNICODE 更改为 JSON_PRETTY_PRINT

现在我在服务器中的响应是 JSON 格式并且漂亮

然而它仍然给我同样的错误

您应该从 @GET 注释中删除最后一个正斜杠 /

@GET("/RoomForStudents/api/anuncios")
fun getAnuncios(): Call<List<Anuncio>>

由于最后一个 / 指向不同的端点,您的服务器正在抛出一个 HttpNotFoundException