Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

stack exchange api post method

I am trying to upvote a question using the stackexchange API in android. using the URL https://api.stackexchange.com/2.2/questions/{questionID}/upvote

but in the log its just showing something like this org.apache.http.message.BasicHttpResponse@33b2c539

API link for upvote a question is https://api.stackexchange.com/docs/upvote-question

When I am trying from API link its working, but not with the code.

Find below the code below:

String url= "https://api.stackexchange.com/2.2/questions/"+questionId+"/upvote";

                HttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url.toString()); 

                List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);

                nameValuePair.add(new BasicNameValuePair("key", key));
                nameValuePair.add(new BasicNameValuePair("access_token", accessToken));

                try {
                        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
                } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                }
                // making request

                try {
                       response = httpClient.execute(httpPost);
                        Log.d("Http Post Response:", response.toString());
                } catch (ClientProtocolException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }
like image 631
Sudheer Avatar asked Feb 06 '26 20:02

Sudheer


1 Answers

Got the solutions. We should pass 5 parameters to upvote a question.

List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(5);
nameValuePair.add(new BasicNameValuePair("key", key));
nameValuePair.add(new BasicNameValuePair("access_token", accessToken));
nameValuePair.add(new BasicNameValuePair("filter", "default"));
nameValuePair.add(new BasicNameValuePair("site", "stackoverflow"));
nameValuePair.add(new BasicNameValuePair("preview", "false"));

Also, the http response is in JSON format (expected), but it is in Gzip type. We need to decode the response by sending the data to GZIPInputStream and decode in in UTF-8 to read it. (mentioned nowhere in api docs)

            GZIPInputStream gin = new GZIPInputStream(entity.getContent());
            InputStreamReader ss = new InputStreamReader(gin, "UTF-8");
            BufferedReader br = new BufferedReader(ss);
            String line = "", data="";
            while((line=br.readLine())!=null){
                data+=line;
            }
like image 161
Sudheer Avatar answered Feb 09 '26 11:02

Sudheer



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!