2014-09-10 3 views
0

Я пытаюсь получить список JSON постов Blogger внутри на Android приложения, но я получаю эту JSON в качестве результата:Blogger API вызовов возвращение 401 Ошибка Android

{ 
"error": { 
"errors": [ 
{ 
"domain": "global", 
"reason": "required", 
"message": "Login Required", 
"locationType": "header", 
"location": "Authorization" 
} 
], 
"code": 401, 
"message": "Login Required" 
} 
} 

Вот формат моих апи.

https://www.googleapis.com/blogger/v3/blogs/BLOG_ID/posts?key=API_KEY

С blog_id и api_key будучи заполнителей для фактических значений, используемых в коде.

Вот код для извлечения JSON.

private class AsyncCaller extends AsyncTask<Void, Void, String> { 

    @Override 
    protected String doInBackground(Void... params) { 
     // TODO Auto-generated method stub 



     DefaultHttpClient httpclient = new DefaultHttpClient(
       new BasicHttpParams()); 
     HttpPost httppost = new HttpPost(Constants.BLOOGER_API_REQUEST_PREFIX 
       + "/blogs/" + Constants.BLOGGER_TEST_BLOGID + "/posts?key=" 
       + Constants.GOOGLE_API_KEY); 

     Log.d("HTTPPOST", Constants.BLOOGER_API_REQUEST_PREFIX 
       + "/blogs/" + Constants.BLOGGER_TEST_BLOGID + "/posts?key=" 
       + Constants.GOOGLE_API_KEY); 

     httppost.setHeader("Content-type", "application/json"); 

     InputStream inputStream = null; 
     String result = ""; 
     Log.d("BEFORE TRY", "BEFORE TRY"); 
     try { 
      HttpResponse response = httpclient.execute(httppost); 
      Log.d("Executed HTTP POST", "EXECUTED HTTPPOST"); 
      HttpEntity entity = response.getEntity(); 
      Log.d("GOT ENTITY", "GOT ENTITY"); 
      inputStream = entity.getContent(); 

      BufferedReader reader = new BufferedReader(new InputStreamReader(
        inputStream, "UTF-8"), 8); 
      StringBuilder sb = new StringBuilder(); 

      String line = null; 

      Log.d("INSIDE TRY", "INSIDE TRY"); 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
       Log.d("IN LOOP", "IN LOOP"); 
      } 
      result = sb.toString(); 

      Log.d("RESULT DONE", result.toString()); 


     } catch (Exception e) { 
      // Bad 
      Log.d("BAD E", "BAD E"); 
      e.printStackTrace(); 

     } finally { 

      try { 
       if (inputStream != null) { 
        inputStream.close(); 
       } 
      } catch (Exception squish) { 
      } 

     } 

     if(result != null){ 

     Log.d("RESULT GOOD", result.toString()); 
     } else { 
      Log.wtf("BAD", "NULL RESULT"); 

     } 

     onPostExecute(result); 
    return result; 
} 

Как вы можете видеть, я подписываю свои запросы с помощью ключа API, так что это не проблема.

Я пошел в блог в настройках вопроса и установил видимость для публики, поэтому я не думаю, что проблема не в OAuth. Я не понимаю, что еще нужно для выполнения «Требуется вход» в приложении, я бы предпочел, чтобы пользователь просто мог открыть приложение и посмотреть записи в блоге, не подвергая действию то, что происходит под капотом. И мой https, вызов api прекрасно работает в браузере, давая мне точный список результатов, которые я ожидал, поэтому синтаксис вызова API тоже не является проблемой, что оставляет меня в весьма затруднительном положении.

+0

Вы пробовали в браузере? Получаете ли вы желаемый результат? –

+0

@Indra Он отлично работает в браузере. – ChristianCuevas

+0

Метод Get или метод post –

ответ

1

Используйте HttpGet метод

 HttpGet httpGet = new HttpGet("https://www.googleapis.com/blogger/v3/blogs/BLOG_ID/posts?key=" +paramAPIKEY); 

Просто замените postmethod с Get

+0

Я неправильно понял ваш предыдущий комментарий, прошу прощения, спасибо за вашу помощь. – ChristianCuevas

+0

Имейте счастливое кодирование :) –

Смежные вопросы