2012-03-12 1 views
3

Я пытаюсь использовать this API в своем приложении для Android. Это очень просто, вы даете ему tiny URL, и он возвращает оригинал.Как использовать API в Android?

Это мой первый опыт использования API. Так вот, как я это сделал:

try { 
    HttpClient client = new DefaultHttpClient(); 
    String url = "http://tiny.pl/htk" //The tiny URL 
    String getURL = "http://untiny.me/api/1.0/extract?url="+url+"&format=text"; //The API service URL 
    HttpGet get = new HttpGet(getURL); 
    HttpResponse responseGet = client.execute(get); 
    HttpEntity resEntityGet = responseGet.getEntity(); 
    if (resEntityGet != null) { 
     //do something with the response 
     Log.i("GET RESPONSE",EntityUtils.toString(resEntityGet)); 
     output.setText(EntityUtils.toString(resEntityGet)); //This is a TextView   
    } 
    else { 
     output.setText("null reponse"); 
    } 
} catch(Exception e) { 
    output.setText("exception"); 
} 

Мои вопросы:

  • ли с помощью HttpGet правильный путь в решении APIs?
  • Если да,, то Какие ошибки я там составил? Я всегда получаю «исключение» в своем TextView.
+0

Добавить e.printStackTrace(); к вашему блоку catch. Затем посмотрите в своем журнале, чтобы узнать, какое исключение выбрасывается. – FoamyGuy

+0

Ничего не появляется. Мой LogCat ничего не показывает! Вы говорите, что мой способ справиться с API-интерфейсом правильный? – iTurki

+0

Нет, если ваш TextView показывает «исключение», тогда что-то идет не так. Вам нужно добавить e.printStackTrace(); звоните в ваш блок catch, чтобы вы могли видеть, какое именно исключение действительно выбрасывается. Ничего не появится в вашем журнале, пока вы это не сделаете. – FoamyGuy

ответ

2

Убедитесь, что вы назначили «resEntityget» для строки при ее преобразовании и повторном использовании строки, а не попытке ее конвертировать. Это приведет к ошибкам.

Попробуйте это:

if (resEntityGet != null) { 
     String response = EntityUtils.toString(resEntityGet); 
     Log.i("GET RESPONSE",response); 
     output.setText(response); //This is a TextView   
    } 
+0

Я уже включил это разрешение – iTurki

+0

Тогда я не уверен. У меня есть код, который работает отлично, без каких-либо изменений. – dymmeh

+0

Logcat показывает GET RESPONSE как google, когда я запускаю приложение – dymmeh

0

Из того, что я проверил, во время выполнения вызывается исключение UnknownHostException.

+0

Фактический URL-адрес работает, если вы поместите его в браузер. Я думаю, что если @iturki использует кодировку URL, проблема сама решит – dymmeh

+0

@Olek: Weird. Это не похоже на меня. Можете ли вы предложить, как я это решаю? – iTurki

+0

@dymmeh, что вы подразумеваете под «кодировкой URL»? заменяя строку в HttpGet URI? – iTurki

0

Пользуется HttpGet правильный путь в решении APIs?

ДА

Если да, то, что ошибки, которые я сделал там? Я всегда получаю «исключение» в своем TextView.:

, потому что вы передаете неправильный URL в HttpGet

правильный путь:

Кулак Добавить URL Params в URL:

ВАШЕ выглядеть следующим образом:

String strurl="http://stackoverflow.com/questions/tagged/android?page=5&sort=newest&pagesize=15"; 

ИСПОЛЬЗОВАНИЕ TinyURL «API»:

   HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httppost = new HttpGet("http://tinyurl.com/api-create.php"); 
    // Add your data 
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
    nameValuePairs.add(new BasicNameValuePair("url",strurl)); 

    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

    // Execute HTTP Post Request 
    HttpResponse response = httpclient.execute(httppost); 
    HttpEntity resEntityGet = response.getEntity(); 
    tinyUrl=EntityUtils.toString(resEntityGet); 

Теперь используйте этот адрес означает Tinyurl как:

try { 
    HttpClient client = new DefaultHttpClient(); 

    HttpGet get = new HttpGet(tinyUrl); 
    HttpResponse responseGet = client.execute(get); 
    HttpEntity resEntityGet = responseGet.getEntity(); 
    if (resEntityGet != null) { 
     //do something with the response 
     Log.i("GET RESPONSE",EntityUtils.toString(resEntityGet)); 
     output.setText(EntityUtils.toString(resEntityGet)); //This is a TextView   
    } 
    else { 
     output.setText("null reponse"); 
    } 
} catch(Exception e) { 
    output.setText("exception"); 
} 

или если вы хотите использовать статическую URL затем закодировать URL ИСПОЛЬЗОВАНИЕ tinyurl с Params затем переходят в HttpGet() СДЕЛАННЫЙ!

+0

Почему вы используете TinyURL API? Мой входной URL-адрес уже крошечный? – iTurki

+0

Да, iturki, потому что ваш полный url не закодирован с параметрами. если вы хотите использовать статический url, тогда кодируйте url с параметрами с помощью TinyURL API. –

+0

Я думаю, вы поняли? –