Sudheer
Sudheer

Reputation: 327

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();
                }

Upvotes: 3

Views: 179

Answers (2)

Sudheer
Sudheer

Reputation: 327

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;
            }

Upvotes: 3

Charaf Eddine Mechalikh
Charaf Eddine Mechalikh

Reputation: 1248

org.apache.http.message.BasicHttpResponse@33b2c539 is because of this line

       Log.d("Http Post Response:", response.toString());

try this instead

       String result = EntityUtils.toString(response.getEntity());
       Log.d("Http Post Response:", result);

Upvotes: 0

Related Questions