为了账号安全,请及时绑定邮箱和手机立即绑定

改造 POST jsonObject 不上传

改造 POST jsonObject 不上传

PHP
饮歌长啸 2023-07-30 13:31:50
我已经为此工作了几个小时,但没有取得任何进展。我是改造新手,基本上只是尝试使用 jsonObject 发出简单的发布请求,但收到此错误:java.lang.illegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $我尝试过将客户端代码的几乎每一部分更改为使用 multipart 或 requestBody 甚至我的 php 代码,但没有任何效果,还尝试回显脚本中的输入,但它打印为空。非常感谢您的每一个回复,谢谢。界面interface ApiInterface {    @Headers("Content-Type: application/json")    @POST(BuildConfig.URL_REGISTER)    fun signUpUser(@Body jsonObject: JSONObject): Call<Response>}回复data class Response(@SerializedName("success") val success: Boolean,    @SerializedName("message") val message: String,    @SerializedName("userId") val userId:String)客户class ApiClient {private external fun register(): Stringcompanion object {    // Used to load the 'native-lib' library on application startup.    init {        System.loadLibrary("native-lib")    }}private val okhttpClient = OkHttpClient.Builder().build()private val gson: Gson = GsonBuilder()    .setLenient()    .create()val instance: ApiInterface by lazy {    val  retrofit = Retrofit.Builder()        .baseUrl(register())        .addConverterFactory(GsonConverterFactory.create(gson))        .client(okhttpClient)        .build()    retrofit.create(ApiInterface::class.java)}要求val jsonObject = JSONObject()    jsonObject.put("username", username)    jsonObject.put("password", password)    jsonObject.put("email", email)    jsonObject.put("termsOfService", termsOfService)    jsonObject.put("profilePicPath", imagePath)ApiClient().instance.signUpUser(jsonObject).enqueue(object: Callback<com.passionit.picnbuy.models.Response>{    override fun onFailure(        call: Call<com.passionit.picnbuy.models.Response>, t: Throwable) {            Toast.makeText(this@LoginOrSignUpActivity, t.message, Toast.LENGTH_LONG).show()        }
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

亲爱的朋友。我建议将以下两行添加到 build.gradle 文件中。


    // Logging Interceptor

    implementation "com.squareup.okhttp3:logging-interceptor:4.7.2"

    implementation 'org.conscrypt:conscrypt-android:2.4.0'

并如下所示使用它



object ApiServiceContainer {

    private var apiService: ApiService? = null

    fun getApiService(): ApiService {

        if (apiService == null) {

            val logging = HttpLoggingInterceptor()

            logging.level = HttpLoggingInterceptor.Level.BODY

            val httpClient = OkHttpClient.Builder()

            httpClient.addInterceptor { chain ->

                val original = chain.request()

                val requestBuilder = original.newBuilder()

                    .header("Authorization", "Bearer " + token)

                    .header("Accept", "application/json")

                    .header("Content-Type", "application/json")

                val request = requestBuilder.build()

                chain.proceed(request)

            }

            httpClient.connectTimeout(30, TimeUnit.SECONDS)

            httpClient.readTimeout(30, TimeUnit.SECONDS)

            httpClient.addNetworkInterceptor(logging)

            val okHttpClient = httpClient.build()

            val gson = GsonBuilder()

                .setLenient()

                .create()

            val retrofit = Retrofit.Builder()

                .baseUrl(EndPoints.API_BASE_URL)

                .addConverterFactory(

                    GsonConverterFactory.create(gson)

                )

                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())

                .client(okHttpClient)

                .build()

            apiService = retrofit.create(ApiService::class.java)

        }

        return apiService!!

    }


这样你就可以看到服务器发出的错误。



查看完整回答
反对 回复 2023-07-30
?
噜噜哒

TA贡献1784条经验 获得超7个赞

我发现,无论出于何种原因,在 php 中接收时,发送除数组或字段之外的任何内容都会添加额外的字符,我最终只是使用这样的字段。


interface ApiInterface {

@FormUrlEncoded

@POST(BuildConfig.URL_REGISTER)

fun signUpUser(@Field("username") username: String,

               @Field("password") password: String,

               @Field("email") email: String,

               @Field("termsOfService") termsOfService: Boolean,

               @Field("profilePicPath") profilePicPath: String): Call<Response>

}


在 php 中它是这样接收的


$username = $_POST['username'];

$password = $_POST['password'];

$email = $_POST['email'];

$termsOfService = $_POST['termsOfService'];

$profilePicPath = $_POST['profilePicPath'];


查看完整回答
反对 回复 2023-07-30
  • 2 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信