Страница 1 из 1
Работа с API .
Добавлено: 05 июн 2013, 14:25
phenomenon
Помогите разобраться.
На собеседовании попросили сделать следующее.
Программа выводит список фоток с сайта
http://www.panoramio.com . когда нажимаешь по фото открывается браузер с фоткой.
Нужно использовать для получения списка фоток API rest их(
http://www.panoramio.com).
Мои знания это основы джава и уроки по андроид на сайте
Вопросы:
1) Объясните пожалуйста что такое rest ?
2) Искал в интернете примеры подлючения API к приложению андроид не нашел, как это делается? и как использовать.
3) Скиньте плиз если кто знает примеры работы с API разными для андроида для чайников. Спасибо!
Re: Работа с API .
Добавлено: 05 июн 2013, 15:10
klblk
1) мб имеется ввиду что-нибудь типа:
http://habrahabr.ru/post/176729/, к слову первая гугл-ссылка по запросу "api rest android"
2) как я понял там API на JavaScript, тут ничем помочь не могу
3) к каждому API как правило индивидуальный подход (от простого привязывания .jar библиотеки, до компиляции нативной библиотеки с помощью NDK. В твоём случае ни то ни другое не подойдет)
Re: Работа с API .
Добавлено: 05 июн 2013, 15:14
phenomenon
да видел это статью.. но она рассказывает как лучше сделать.. мне бы самый простой вариант понять.
Дали на эту задачку 1 час. Сказали сделать по простому, просто хотят посмотреть ход мысли. Если час дали значит что то не сложное должно быть..
а я даже не знаю с какого конца подойти.
Re: Работа с API .
Добавлено: 05 июн 2013, 18:08
rezak90
phenomenon писал(а):Помогите разобраться.
На собеседовании попросили сделать следующее.
Программа выводит список фоток с сайта
http://www.panoramio.com . когда нажимаешь по фото открывается браузер с фоткой.
Нужно использовать для получения списка фоток API rest их(
http://www.panoramio.com).
Мои знания это основы джава и уроки по андроид на сайте
Вопросы:
1) Объясните пожалуйста что такое rest ?
2) Искал в интернете примеры подлючения API к приложению андроид не нашел, как это делается? и как использовать.
3) Скиньте плиз если кто знает примеры работы с API разными для андроида для чайников. Спасибо!
то что собеседование пытаетесть пройти это хорошо, но очень рано судя по тому что задаёте такие вопросы... на счёт апи было бы время то сейчас объяснил бы, а так побежал домой уже
Re: Работа с API .
Добавлено: 05 июн 2013, 19:07
phenomenon
Функционал я уже разобрался как написать

. В андроид пустяки добавить.
Код: Выделить всё
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.json.*;
public class JsonGet {
/**
* @param args
* @throws JSONException
*/
public static void main(String[] args) throws JSONException {
// TODO Auto-generated method stub
ArrayList<PanoramioPhoto> list = new ArrayList<PanoramioPhoto>();
String link = "http://www.panoramio.com/map/get_panoramas.php?set=public&from=0&to=20&minx=-180&miny=-90&maxx=180&maxy=90&size=medium&mapfilter=true";
String result = requestGET(link);
int beginIndex = result.indexOf('[');
int endIndex = result.length()-1;
String resultFixed = result.substring(beginIndex, endIndex);
JSONArray jArray = new JSONArray(resultFixed);
for (int i=0;i<jArray.length();++i)
{
PanoramioPhoto photo = new PanoramioPhoto();
photo.setPhoto_id(jArray.getJSONObject(i).getString("photo_id"));
photo.setPhoto_title(jArray.getJSONObject(i).getString("photo_title"));
photo.setPhoto_url(jArray.getJSONObject(i).getString("photo_url"));
list.add(photo);
}
//for (PanoramioPhoto photo : list)
//{
// System.out.println(photo.getPhoto_id());
//}
}
static public String requestGET(String address) {
String result="";
try {
URL url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", "Java bot");
conn.connect();
int code=conn.getResponseCode();
if (code==200) {
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
result+=inputLine;
}
in.close();
}
conn.disconnect();
conn=null;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
Re: Работа с API .
Добавлено: 05 июн 2013, 19:11
phenomenon
Опыт приходит со временем) я не говорю что я спец в этих вешай. Опыт что спрашивают на собеседованиях тоже лишним не будет.
Re: Работа с API .
Добавлено: 05 июн 2013, 19:56
rezak90
1) первое и самое не приятное что кинулось в глаза:
Код: Выделить всё
int beginIndex = result.indexOf('[');
int endIndex = result.length()-1;
String resultFixed = result.substring(beginIndex, endIndex);
хочется просто услышать в ответ, зачем?
2) неправильное обрабатывание ошибки в методе requestGET, если она произойдёт на момент считывание BufferedReader то поток останется открытым
3) вот такое тоже не очень красиво:
Код: Выделить всё
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
4) хотел скопировать, указать на ошибки с конкатинацией, но их слишком много, в общем немного относится к первому вопросу, зачем? много лишних движений со строками.
5) нужно немножко поработать над красотой кода, константы как правило выносятся в поля класса.
Re: Работа с API .
Добавлено: 06 июн 2013, 21:10
phenomenon
rezak90 писал(а):1) первое и самое не приятное что кинулось в глаза:
Код: Выделить всё
int beginIndex = result.indexOf('[');
int endIndex = result.length()-1;
String resultFixed = result.substring(beginIndex, endIndex);
хочется просто услышать в ответ, зачем?
там инфа такого формата
{
"count": 773840,"photos": [
{
"photo_id": 532693,
"photo_title": "Wheatfield in afternoon light",
"photo_url": "
http://www.panoramio.com/photo/532693",
"photo_file_url": "
http://static2.bareka.com/photos/medium/532693.jpg",
"longitude": 11.280727,
"latitude": 59.643198,
"width": 500,
"height": 333,
"upload_date": "22 January 2007",
"owner_id": 39160,
"owner_name": "Snemann",
"owner_url": "
http://www.panoramio.com/user/39160",
},
{
"photo_id": 505229,
"photo_title": "Etangs près de Dijon",
"photo_url": "
http://www.panoramio.com/photo/505229",
"photo_file_url": "
http://static2.bareka.com/photos/medium/505229.jpg",
"longitude": 5.168552,
"latitude": 47.312642,
"width": 350,
"height": 500,
"upload_date": "20 January 2007",
"owner_id": 78506,
"owner_name": "Philippe Stoop",
"owner_url": "
http://www.panoramio.com/user/78506"
}, ...
]
}
Код: Выделить всё
JSONArray jArray = new JSONArray(resultFixed);
ругается если текст начинатся с { , он тока то что между [] обрабатывает.
а остальном да много недочетов.. я джаву и андроид учу 2 месяца. от силы. новичок)
Re: Работа с API .
Добавлено: 06 июн 2013, 22:02
rezak90
ругается если текст начинатся с { , он тока то что между [] обрабатывает.
всё нормально, json валидный, нужно сначала объект получить а потом массив, массивы обвёртываются в квадратные скобки, а объекты в фигурные
Re: Работа с API .
Добавлено: 06 июн 2013, 22:28
phenomenon
терь буду знать, спс )