我是android studio和kotlin的新手。我试图将数据(对象)发布到服务器上,但得到了404响应代码。
我的改造:
object RetrofitClient {
private var OurInstance : Retrofit?=null
val client = OkHttpClient.Builder()
val instance:Retrofit
get() {
if (OurInstance==null)
{
OurInstance =Retrofit.Builder()
.baseUrl("http://coreapi.imagin8ors.org:8080/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
}
return OurInstance!!
}
}
我的界面:
interface IMyAPI {
@GET("v1/child/{dynamic}/learningpods_new")
fun getDynamic(@Path("dynamic")dynamic:String):Observable<ArrayList<Data>>
@POST("v1/authenticate/create")
fun createParent(@Body parentDetails: ParentDetails):Call<ParentDetails>
}
我的活动中的代码段:
fun sendNetworkRequest(parentDetails: ParentDetails){
val retrofit=Retrofit.Builder().baseUrl("http://coreapi.imagin8ors.org:8080/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val client=retrofit.create(IMyAPI::class.java)
val call = client.createParent(parentDetails)
call.enqueue(object :Callback<ParentDetails>{
override fun onFailure(call: Call<ParentDetails>?, t: Throwable?) {
Toast.makeText(this@ParentmainActivity,"something went wrong",Toast.LENGTH_LONG).show()
}
override fun onResponse(call: Call<ParentDetails>?, response: Response<ParentDetails>?) {
Toast.makeText(this@ParentmainActivity,"successful :"+response?.code(),Toast.LENGTH_LONG).show()
}
})
}
函数调用:sendNetworkRequest(new_parent)
现在,返回的响应代码是404。此问题先前已经提出过,但是这些解决方案对我不起作用。这就是为什么我发布了另一个问题。
最初,我使用的是retrofitclient,但是后来没有用,所以我尝试使用sendNetworkResquest()函数。但是,这也不起作用。
答案 0 :(得分:1)
我认为您需要一个PUT
请求。
当我使用POST
尝试您的API时,实际上得到了405 - Method Not Allowed
。但是PUT
可以工作..除了我没有发送数据,所以我得到了400
。但绝对不是404
curl -X POST http://.../create -> Method not allowed
curl -X PUT http://.../create -> Bad Request
还要仔细检查您的身体实际上是否包含后端端点指定的所需格式的有效数据,否则您将得到进一步的错误