簡體   English   中英

使用 OkHttp 訪問 API 時獲取 Null 響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM