Всякий раз, когда я нажимаю кнопку «Отправить», пытаясь отправить имя пользователя и сообщение из текстового поля на мой URL-адрес, он отклоняется, я пытался отладить ответ, и он говорит, что мое сообщение и тело имеют нулевое значение. Кроме того, мой заголовок говорит, что он все еще в HTML/ Формат UTF8
Вот мой журнал вызовов, тела, сообщения и заголовка:
I / System.out: Вызов: true Тело ответа: сообщение nullResponse:, Заголовок ответа: X-Content-Опции типа: nosniff I / System.out: X-XSS-Protection: 1;mode = block Cache-Control: no-cache, no-store, max-age = 0, must-revalidate Прагма: no-cache Истекает: 0 X-Frame-Options: DENY Content-Type: text / html; charset = UTF-8 Content-Language: en Transfer-Encoding: chunked Дата: чт, 17 окт. 2019 11:05:07 GMT Соединение: закрыть
Объект
Класс данных Post (@SerializedName ("username)") var username: String, @SerializedName (" comment ") var textBox: String)
Ответ
класс WebUserData (сообщение var: String, статус var: String, код var: String,var id: String, var data: WebUser)
ApiClient
class PostApiClient {
interface PostApiInterface{
@Headers("Content-Type: application/json")
@POST("api/posts")
fun postCreate(@Body post: Post) : Call<WebUserData>
}
companion object {
var mApiInterface: PostApiClient.PostApiInterface? = null
private const val API_URL = "****************" (url)
fun getApiClient(): PostApiClient.PostApiInterface {
if (mApiInterface == null) {
val okHttpClient = OkHttpClient.Builder()
.connectTimeout(1, TimeUnit.MINUTES)
.writeTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build()
val retrofit = Retrofit.Builder()
.baseUrl(API_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
mApiInterface = retrofit.create(PostApiClient.PostApiInterface::class.java)
}
return mApiInterface!!
}
}
}
Моя активность
Обратная связь класса: AppCompatActivity (), GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private var usernameHolder: String? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_feedback)
//PRONALAZI IME KORISNIKA, UZIMA KOMENTAR IZ BOKSA I POZIVA BUTTON
usernameHolder = getUserFromId(1).username
val username = usernameHolder.toString()
val value = findViewById(R.id.fbfield) as EditText
val textBox = value.text
val submitBtn = findViewById(R.id.fbsend) as Button
//===============================================================
val editor = defaultSharedPreferences.edit().apply {
putString("username" , username )
putString("textBox", textBox.toString())
}
editor.apply()
submitBtn.setOnClickListener(object : View.OnClickListener {
override fun onClick(view: View) {
println("POST CREATE: " + Post(username, textBox.toString()).textBox + ", " + Post(username, textBox.toString()).username)
PostApiClient.getApiClient().postCreate(Post(username, textBox.toString())).enqueue(object: Callback<WebUserData>{
override fun onFailure(call: Call<WebUserData>, t: Throwable) {
longToast("Saving trip failed.")
}
override fun onResponse(call: Call<WebUserData>, response: Response<WebUserData>) {
println("Call: " + call.isExecuted)
println("Response body:" + response.body() + "Response message: " + response.message() + ", Response header:" + response.headers())
if(response.body() != null){
if(response.body()!!.code.toInt() == 201)
longToast("Trip data saved successfully.")
}
}
})
}
})
setSupportActionBar(toolbar)
supportActionBar?.setDisplayShowTitleEnabled(false)
supportActionBar?.setHomeButtonEnabled(true)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
}