500错误代码,带“0”;“内部服务器错误”;消息,在android应用程序中使用API执行POST方法时
为了确认API,我在POSTMAN应用程序中进行了尝试,但响应正常,数据已成功插入。下面是邮递员的调查结果 在Logcat中也会出现以下错误500错误代码,带“0”;“内部服务器错误”;消息,在android应用程序中使用API执行POST方法时,android,kotlin,retrofit2,internal-server-error,Android,Kotlin,Retrofit2,Internal Server Error,为了确认API,我在POSTMAN应用程序中进行了尝试,但响应正常,数据已成功插入。下面是邮递员的调查结果 在Logcat中也会出现以下错误 2021-06-01 17:56:58.522 16534-16534/? E/ample.addcours: Unknown bits set in runtime_flags: 0x8000 2021-06-01 17:56:58.893 1791-2057/? E/SurfaceFlinger: ro.sf.lcd_density must be
2021-06-01 17:56:58.522 16534-16534/? E/ample.addcours: Unknown bits set in runtime_flags: 0x8000
2021-06-01 17:56:58.893 1791-2057/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
2021-06-01 17:56:58.897 1791-1897/? E/SurfaceFlinger: ro.sf.lcd_density must be defined as a build property
2021-06-01 17:57:01.325 1887-1887/? E/netmgr: Failed to open QEMU pipe 'qemud:network': Invalid argument
2021-06-01 17:57:01.713 1895-1895/? E/wifi_forwarder: RemoteConnection failed to initialize: RemoteConnection failed to open pipe
2021-06-01 17:57:48.882 1746-16596/? E/ResolverController: No valid NAT64 prefix (100, <unspecified>/0)
2021-06-01 17:57:48.915 2062-2154/system_process E/InputDispatcher: Window handle Window{33fd41d u0 com.example.addcourse/com.example.addcourse.RegisterActivity} has no registered input channel
2021-06-01 17:57:48.934 2062-6837/system_process E/InputDispatcher: Window handle Window{33fd41d u0 com.example.addcourse/com.example.addcourse.RegisterActivity} has no registered input channel
2021-06-01 17:56:58.52216534-16534/?E/ample.ADDCURS:运行时设置的未知位\u标志:0x8000
2021-06-01 17:56:58.893 1791-2057/? E/SurfaceFlinger:ro.sf.lcd\u密度必须定义为构建属性
2021-06-01 17:56:58.897 1791-1897/? E/SurfaceFlinger:ro.sf.lcd\u密度必须定义为构建属性
2021-06-01 17:57:01.325 1887-1887/? E/netmgr:无法打开QEMU管道“qemud:网络”:参数无效
2021-06-01 17:57:01.713 1895-1895/? E/wifi_转发器:RemoteConnection未能初始化:RemoteConnection未能打开管道
2021-06-01 17:57:48.882 1746-16596/? E/ResolverController:没有有效的NAT64前缀(100,/0)
2021-06-01 17:57:48.915 2062-2154/system_process E/InputDispatcher:窗口句柄窗口{33fd41d u0 com.example.addcourse/com.example.addcourse.RegisterActivity}没有注册的输入通道
2021-06-01 17:57:48.934 2062-6837/system_process E/InputDispatcher:窗口句柄窗口{33fd41d u0 com.example.addcourse/com.example.addcourse.RegisterActivity}没有注册的输入通道
因为我是android应用程序的新手。这是我第一个使用API概念的程序。
这是我试过的代码。
请引导我找到问题所在
data class RegisterResponse(
@SerializedName("status")
val status: Int,
@SerializedName("message")
val message: String
)
object ApiClient {
// retrofit is HTTP client which can send request to API
fun getRetrofit() : Retrofit {
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create()) // this is used to automatically convert json string into java/kotlin object and java/kotlin object into json string whenever required
.baseUrl("https://XXXX.com/XXXX/api/index.php/")
.build()
return retrofit
}
}
interface ApiService {
// @Headers("Content-type: application/json")
@POST("Course/addCourse")
@FormUrlEncoded
fun signup(
@Field("course_title") title: String,
@Field("course_desc") desc: String,
@Field("course_fees") fees: String
) : Call<RegisterResponse>
}
class RegisterActivity : AppCompatActivity() {
lateinit var binding: ActivityRegisterBinding
lateinit var retrofit: Retrofit
lateinit var apiSerice: ApiService
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityRegisterBinding.inflate(layoutInflater)
setContentView(binding.root)
retrofit = ApiClient.getRetrofit()
apiSerice = retrofit.create(ApiService::class.java)
binding.btnRegister.setOnClickListener {
register()
}
}
private fun register() {
val title = binding.etCourseTitle.text.toString()
val desc = binding.etCourseDescription.text.toString()
val fees = binding.etCourseFee.text.toString()
val call = apiSerice.signup(title, desc, fees)
val progressDialog = ProgressDialog(this);
progressDialog.setMessage("Please wait. We are processing your request")
progressDialog.setCancelable(false)
call.enqueue(object: Callback<RegisterResponse> {
override fun onResponse(call: Call<RegisterResponse>, response: Response<RegisterResponse>) {
progressDialog.dismiss()
if(response.isSuccessful) {
val registerResponse: RegisterResponse? = response.body()
if(registerResponse?.status == 0) {
Toast.makeText(baseContext, "Registered successfully", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(baseContext, registerResponse?.message, Toast.LENGTH_LONG).show()
}
} else {
Toast.makeText(baseContext, response.message()+"/nSomething went wrong. Please retry.(1)", Toast.LENGTH_LONG).show()
}
}
override fun onFailure(call: Call<RegisterResponse>, t: Throwable) {
progressDialog.dismiss()
Toast.makeText(baseContext, t.message+"Something went wrong. Please retry.(2)", Toast.LENGTH_LONG).show()
}
})
progressDialog.show()
}
}
数据类寄存器响应(
@序列化名称(“状态”)
val状态:Int,
@SerializedName(“消息”)
val消息:字符串
)
对象客户端{
//改型是HTTP客户端,它可以向API发送请求
fun GetReformation():改装{
val reformation=reformation.Builder()
.addConverterFactory(GsonConverterFactory.create())//这用于在需要时自动将json字符串转换为java/kotlin对象,并将java/kotlin对象转换为json字符串
.baseUrl(“https://XXXX.com/XXXX/api/index.php/")
.build()
回流改造
}
}
接口服务{
//@Headers(“内容类型:application/json”)
@POST(“课程/添加课程”)
@FormUrlEncoded
有趣的注册(
@字段(“课程名称”)标题:字符串,
@字段(“课程描述”)描述:字符串,
@字段(“课程费用”)费用:字符串
):呼叫
}
类RegisterActivity:AppCompatActivity(){
lateinit变量绑定:ActivityRegisterBinding
lateinit var改装:改装
lateinit var apiSerice:ApiService
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
绑定=ActivityRegisterBinding.充气(放平)
setContentView(binding.root)
改型=ApiClient.getRefundation()
apiseriece=reformation.create(ApiService::class.java)
binding.btnRegister.setOnClickListener{
寄存器()
}
}
私人娱乐登记册(){
val title=binding.etCourseTile.text.toString()
val desc=binding.etCoursedDescription.text.toString()
val fees=binding.etCourseFee.text.toString()
val call=apiSerice.signup(标题、说明、费用)
val progressDialog=progressDialog(此);
progressDialog.setMessage(“请稍候,我们正在处理您的请求”)
progressDialog.setCancelable(false)
排队(对象:Callback{
覆盖fun onResponse(调用:调用,响应:响应){
progressDialog.disclose()的
if(response.issucessful){
val registerResponse:registerResponse?=response.body()
if(registerResponse?.status==0){
Toast.makeText(baseContext,“注册成功”,Toast.LENGTH\u LONG.show())
}否则{
Toast.makeText(baseContext,registerResponse?.message,Toast.LENGTH\u LONG.show())
}
}否则{
Toast.makeText(baseContext,response.message()+“/n某些内容出错。请重试。(1)”,Toast.LENGTH\u LONG.show()
}
}
覆盖失效时的乐趣(调用:调用,t:可丢弃){
progressDialog.disclose()的
Toast.makeText(baseContext,t.message+“出现问题。请重试。(2)”,Toast.LENGTH\u LONG.show()
}
})
progressDialog.show()
}
}
您的API需要请求正文中的JSON数据。但是您正在尝试以FormURLEncoded的形式发送数据
在Kotlin中创建一个数据模型类,如下所示
data class Course(
@SerializedName("course_title")
val courseTitle: String,
@SerializedName("course_desc")
val courseDesc: String,
@SerializedName("course_fees")
val courseFees: String
)
并在ApiService.kt
文件中进行更改
interface ApiService {
@POST("Course/addCourse")
fun signup(
@Body data: Course
): Call<RegisterResponse>
}
您收到的错误是什么?我收到的是“内部服务器错误”@ohhhtatvarun您可以检查代码UAE a logger以记录您的改装请求,然后也许您可以检查您的请求有什么问题。@ohhhtatvarun感谢您的输入,添加了错误,请检查一下。在我做了上述更改后,它工作正常。谢谢。
// rest of your code
// .....
val data = Course("Some course title", "Course desc", "150")
val service = .....
// call and pass parameter
val call = serivce.signup(data)
// handle response here