【发布时间】:2020-11-05 21:22:56
【问题描述】:
所以我有一个 API 端点 (https://someEndpoint.com/someEndpoint/e-member?insert),其主体如下所示,如 Postman 所示:
{
"emember_id": "B3456",
"emember_name": "Darren Kent",
"emember_gender" : "L",
"emember_nohp" : "08123456799",
"emember_email" : "darreen@gmail.com",
"emember_address" : "Kost Mawar",
"emember_username" : "Dreen12",
"emember_password" : "Rahasia123456",
"emember_dob" : "1996-03-13T00:00:00.000Z",
"emember_lastupdate" : "0000-00-00T00:00:00.000Z"
}
还有这个改造客户端
object RetrofitClient {
private const val BASE_URL = "https://someEndpoint.com/someEndpoint/e-member?insert"
val instance: API by lazy{
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
retrofit.create(API::class.java)
}
}
带接口:
interface API {
@POST("e-member?insert")
fun insertNewMember(@Body postedInformation : RegisterMemberRequestBody): Call<DefaultResponse>
}
这是数据类RegisterMemberRequestBody:
@Parcelize
data class RegisterMemberRequestBody(
@field:SerializedName("emember_id")
val ememberId: String? = null,
@field:SerializedName("emember_username")
val ememberUsername: String? = null,
@field:SerializedName("emember_gender")
val ememberGender: String? = null,
@field:SerializedName("emember_name")
val ememberName: String? = null,
@field:SerializedName("emember_password")
val ememberPassword: String? = null,
@field:SerializedName("emember_dob")
val ememberDob: String? = null,
@field:SerializedName("emember_nohp")
val ememberNohp: String? = null,
@field:SerializedName("emember_email")
val ememberEmail: String? = null,
@field:SerializedName("emember_lastupdate")
val ememberLastupdate: String? = null,
@field:SerializedName("emember_address")
val ememberAddress: String? = null
) : Parcelable
这是我调用改造客户端的片段中的 sn-p
RetrofitClient.instance.insertNewMember(RegisterMemberRequestBody(
memberId,
username,
selectedGender,
fullName,
password,
selectedBirthday,
phoneNumber,
email,
lastUpdate,
address
)).enqueue(object: Callback<DefaultResponse> {
override fun onFailure(call: Call<DefaultResponse>, t: Throwable) {
Toast.makeText(activity as AppCompatActivity, "Request Failed!", Toast.LENGTH_LONG).show()
binding.registerFormRelativeLayout.visibility = View.VISIBLE
binding.progressBar.visibility = View.GONE
}
override fun onResponse(
call: Call<DefaultResponse>,
response: Response<DefaultResponse>
) {
Log.i("register", response.body().toString())
//renderSnackBar()
navigateToLoginPage()
}
})
参数(memberId,username,selectedGender,fullName,password,selectedBirthday,phoneNumber,email,lastUpdate,address)类是从一些 EditTexts 中挑选出来的。这些是我在 LogCat 中打印时输入的值:
但是,当函数执行时,它在数据库 (Firebase) 中显示为:
如您所见,有些值没有插入到数据库中。任何想法这是怎么发生的?我需要改变什么吗?如果我想指出任何细节,请随时询问。
注意:fullname、address、phoneNumber、selectedBirthDay、selectedGender 是从不同的 Fragment 传递过来的。但我确信 100% 没有问题,因为当我在当前片段中打印它时它显示了所需的值。
**编辑:**
这就是值fullname、address、phoneNumber、selectedBirthDay 和selectedGender 从其他片段传递到此片段的方式。这是当前片段中接受值的另一个 sn-p
lateinit var binding: FragmentRegisterPart2Binding
lateinit var fullName: String
lateinit var selectedGender: String
lateinit var selectedBirthday: String
lateinit var phoneNumber: String
lateinit var address: String
lateinit var username: String
lateinit var password: String
lateinit var email: String
lateinit var confirmPassword: String
var memberId: String = ""
var lastUpdate: String = "0000-00-00T00:00:00.000Z"
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(
inflater,
R.layout.fragment_register_part2, container, false
)
val args = arguments?.let {
RegisterFragmentPart2Args.fromBundle(
it
)
}
if (args != null) {
fullName = args.fullName
address = args.address
phoneNumber = args.phoneNumber
selectedBirthday = args.selectedBirthday
selectedGender = args.selectedGender
}
binding.finishRegistrationButton.setOnClickListener {
validateInformationInput()
}
binding.progressBar.visibility = View.GONE
return binding.root
}
编辑 我尝试过的事情包括:
-
确保改造客户端对象没有任何问题,因为它成功地将数据发送到服务器
-
从另一个片段传递的值没有问题,因为它在当前片段中正确显示
-
接口没有问题,因为它成功发送了一些值
-
Data 类结构没有问题,因为它也成功发送了一些值。
现在我想知道数据类的某些属性是否没有正确删除或类似的东西。 (我在 Android Studio 中使用了一个扩展,它会自动将复制的 Json 主体转换为适当的数据类)
【问题讨论】: