[英]Getting Null Response while using OkHttp to hit an API
我正在尝试使用 OkHttp 访问 API,因为 Volley 不会让正文数据分成多部分,如果可以的话,我不知道该怎么做,所以当我使用它时,一切正常,数据正在发送,但我不断收到 null 或零的回应。 我尝试使用 Postman 击中 API 它运行良好,然后我输入相同的数据 static 是我的代码,然后运行它,仍然是相同的响应。
使用 JSONobject 放置数据
@SuppressLint( "StaticFieldLeak" )
public class OkHttpHandler extends AsyncTask < RequestItem, String, String > {
OkHttpClient client = new OkHttpClient();
@Override
protected String doInBackground(RequestItem... params) {
JSONObject object;
RequestItem requestItem = params[ 0 ];
JSONObject data = requestItem.object;
Toast.makeText( AddHW.this, "dta"+data, Toast.LENGTH_SHORT ).show( );
Log.d( "data", "data" + data );
//MediaType mediaType = MediaType.parse( "text/plain" );
object = new JSONObject();
try {
object.put( "school_id", data.getInt( "school_id" ) );
object.put( "batch_id", data.getInt( "batch_id" ) );
object.put( "category", data.getInt( "category" ) );
object.put( "subject", data.getString( "subject" ) );
object.put( "due_date", data.getString( "due_date" ) );
object.put( "repeat", data.getInt( "repeat" ) );
object.put( "priority", data.getInt( "priority" ) );
object.put( "description", data.getString( "description" ) );
object.put( "additional_detail", data.getString( "additional_details" ) );
object.put( "file_url", data.getString( "file_url" ) );
MediaType JSON = MediaType.parse( "application/json; charset=utf-8" );
RequestBody json = RequestBody.create( object.toString(), JSON );
Request.Builder builder = new Request.Builder();
builder.url( requestItem.url )
.method( "POST", body )
.post( json );
.addHeader( "Cookie", "__cfduid=d5209babc31d5f41904fce0f542568e4e1591610891" );
Request request = builder.build();
try {
Response response = client.newCall( request ).execute();
return Objects.requireNonNull( response.body() ).string();
}
catch (Exception e) {
e.printStackTrace();
}
}
catch (JSONException e) {
e.printStackTrace();
Log.d( "AddHW ", "error:" + e.getMessage() );
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute( s );
try {
JSONObject object = new JSONObject( s );
if ( object.getString( "status" ).equals( "OK" ) ) {
JSONObject res = object.getJSONObject( "results" );
Toast.makeText( AddHW.this, "" + res.getString( "message" ), Toast.LENGTH_SHORT ).show( );
Log.d( "addHw", "response: " + res.getString( "message" ) );
show_add_homeWork( );
}
} catch ( JSONException e ) {
e.printStackTrace( );
Log.d( "error", "error:" + e.getMessage( ) );
}
}
}
这可能会帮助您解决问题,
我注意到您使用了.method( "POST", body )
并且我找不到任何正文可能是由于显示的代码不足,或者它可能是一个全局变量或其他东西,但我看到您创建了一个 Requestbody object (JSONobject) 我认为您在其中存储来自用户的数据(我希望如此),并将其放入.post(json)
中,这应该可以工作并且您应该得到您正在寻找的响应。
还有一件事我认为你不应该使用
.addHeader("Cookie", "__cfduid=d5209babc31d5f41904fce0f542568e4e1591610891")
因为这有点不必要,并且可能会干扰您的后端。 希望这能回答你的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.