HttpUrlConnection POST请求无法正常工作....如何解决?

时间:2017-04-18 10:24:45

标签: android

HttpUrlConnection POST请求无效。告诉我是否有任何其他方式在android中发出POST请求。如果在android中有任何其他方式发出POST请求,请告诉我。如果在android中有任何其他方式发出POST请求,请告诉我。

 public final String apiCall(String pUrl) {
    if( ! isInternetAvailable() )
        return "NO_INTERNET";

    try {
        URL lUrl = new URL(pUrl.replace(" ", "%20"));
        Log.i("url", String.valueOf(lUrl));

       String url = pUrl;

        Log.i("dom", url.substring(0, (url.indexOf('?') - 1)));
        Log.i("para", url.substring((url.indexOf('?') + 1), url.length()) );

        URL obj = new URL(url.substring(0,(url.indexOf('?')-1)));
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();

        //add reuqest header
        con.setRequestMethod("POST");
        con.setRequestProperty("User-Agent", "GYUserAgentAndroid");
        con.setRequestProperty("Content-Type", "application/json");

        String urlParameters = url.substring((url.indexOf('?')+1), url.length());
        Log.i("urlParameters", urlParameters.toString());

        // Send post request
        con.setDoInput(true); // true if we want to read server's response
        con.setDoOutput(true); // false indicates this is a GET request
        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.writeBytes(urlParameters);
        wr.flush();
        wr.close();

        int responseCode = con.getResponseCode();

        BufferedReader in = new BufferedReader(
                new InputStreamReader(con.getInputStream()));
        String inputLine;
        StringBuffer response = new StringBuffer();

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();


        Log.i("res",response.toString());
        return response.toString();

    }catch (Exception e) {
        Log.i("secondEx",e.toString());
        return "ERROR";
    }

}

2 个答案:

答案 0 :(得分:0)

试试这个

InputStream inputStream; 
HttpURLConnection urlConnection; 
byte[] outputBytes;

public class WebServiceAsyncTask extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {

        try {
            URL url = new URL(Url);
            urlConnection = (HttpURLConnection) url.openConnection();
            outputBytes = query.getBytes("UTF-8");
            urlConnection.setRequestMethod("POST");
            urlConnection.setDoOutput(true);
            urlConnection.setConnectTimeout(15000);
            urlConnection.connect();

            OutputStream os = urlConnection.getOutputStream();
            os.write(outputBytes);
            os.flush();
            os.close();

            inputStream = new BufferedInputStream(urlConnection.getInputStream());
            ResponseData = convertStreamToString(inputStream);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();

        }
        return ResponseData;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);


    }

    public String convertStreamToString(InputStream is) {

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder();

        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                sb.append((line + "\n"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }
}

以json字符串格式传递参数

JSONObject() params = new JSONObject();
params.put("key","your parameter");
params.put("key","your parameter");

query=params.toString();

查看this链接以供参考

答案 1 :(得分:0)

执行请求的另一种方法是Retrofit

您可以找到一个好的教程here