邮政请求reatrofit2 android Studio Kotlin
我需要创建用户。必须使用请求帖子。我使用了,但这确实不起作用,没有错误 。您可以看到我的
服务器我的代码:
允许:post,选项
content-type:application/json
{ “名”: ””, “姓”: ””, “电子邮件”: ””, “用户名”:“”, “密码”: ”” }
api.kt
interface Api {
@POST("users/signup")
@FormUrlEncoded
fun createUser(
@Field("first_name") fName: String,
@Field("last_name") lName: String,
@Field("email") email: String,
@Field("username") username: String,
@Field("password") password: String,
): Call<DefaultResponse>
}
retrofitclient.kt
object RetrofitClient {
private val okHttpClient = OkHttpClient.Builder()
.addInterceptor { chain ->
val original = chain.request()
val requestBuilder = original.newBuilder()
.method(original.method(), original.body())
val request = requestBuilder.build()
chain.proceed(request)
}.build()
val instance: Api by lazy {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
retrofit.create(Api::class.java)
}
}
defaultresponse.kt
data class DefaultResponse (val error: Boolean, val message: String)
常量
class Constants {
companion object {
const val BASE_URL = "http://194.62.43.26:1337/api/"
}
}
binding.btnSignup
.setOnClickListener {
val username = binding.etUsername.text.toString().trim()
val password = binding.etPw.text.toString().trim()
val fName = binding.etFirstName.text.toString().trim()
val lName = binding.etLastName.text.toString().trim()
val email = binding.etEmail.text.toString().trim()
if (username.isEmpty()) {
binding.etUsername.error = "Password required"
binding.etUsername.requestFocus()
return@setOnClickListener
}
if (password.isEmpty()) {
binding.etPw.error = "Password required"
binding.etPw.requestFocus()
return@setOnClickListener
}
RetrofitClient.instance.createUser(fName, lName, email, username, password)
.enqueue(object : Callback<DefaultResponse> {
override fun onFailure(call: Call<DefaultResponse>, t: Throwable) {
Toast.makeText(applicationContext, t.message, Toast.LENGTH_LONG).show()
}
override fun onResponse(
call: Call<DefaultResponse>,
response: Response<DefaultResponse>
) {
Toast.makeText(
applicationContext,
response.body()?.message,
Toast.LENGTH_LONG
).show()
}
})
i need for create user . must use request post . im use but this did'nt work and dont have error
. you can see my code
my server :
Allow: POST, OPTIONS
Content-Type: application/json
{
"first_name": "",
"last_name": "",
"email": "",
"username": "",
"password": ""
}
api.kt
interface Api {
@POST("users/signup")
@FormUrlEncoded
fun createUser(
@Field("first_name") fName: String,
@Field("last_name") lName: String,
@Field("email") email: String,
@Field("username") username: String,
@Field("password") password: String,
): Call<DefaultResponse>
}
RetrofitClient.kt
object RetrofitClient {
private val okHttpClient = OkHttpClient.Builder()
.addInterceptor { chain ->
val original = chain.request()
val requestBuilder = original.newBuilder()
.method(original.method(), original.body())
val request = requestBuilder.build()
chain.proceed(request)
}.build()
val instance: Api by lazy {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
retrofit.create(Api::class.java)
}
}
DefaultResponse.kt
data class DefaultResponse (val error: Boolean, val message: String)
Constants.kt
class Constants {
companion object {
const val BASE_URL = "http://194.62.43.26:1337/api/"
}
}
SignUpActivity.kt
binding.btnSignup
.setOnClickListener {
val username = binding.etUsername.text.toString().trim()
val password = binding.etPw.text.toString().trim()
val fName = binding.etFirstName.text.toString().trim()
val lName = binding.etLastName.text.toString().trim()
val email = binding.etEmail.text.toString().trim()
if (username.isEmpty()) {
binding.etUsername.error = "Password required"
binding.etUsername.requestFocus()
return@setOnClickListener
}
if (password.isEmpty()) {
binding.etPw.error = "Password required"
binding.etPw.requestFocus()
return@setOnClickListener
}
RetrofitClient.instance.createUser(fName, lName, email, username, password)
.enqueue(object : Callback<DefaultResponse> {
override fun onFailure(call: Call<DefaultResponse>, t: Throwable) {
Toast.makeText(applicationContext, t.message, Toast.LENGTH_LONG).show()
}
override fun onResponse(
call: Call<DefaultResponse>,
response: Response<DefaultResponse>
) {
Toast.makeText(
applicationContext,
response.body()?.message,
Toast.LENGTH_LONG
).show()
}
})
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论