- Android для начинающих: использование REST API
- 1. Включение доступа к Интернету
- 2. Создание фоновых потоков
- 3. Создание HTTP-соединения
- 4. Добавление заголовков запросов
- 5. Чтение ответов
- 6. Разбор JSON ответов
- 7. Использование разных HTTP методов
- 8. Кэширование ответов
- Заключение
- NPLIX
- Search This Blog
- WordPress Android App with REST API And Retrofit
- What is Retrofit?
- Prerequisite for using the Retrofit for WordPress Android App
- Create Layout file for WordPress Android App
- Create POJO of WordPress Website REST API
- Create the Service for WordPress Using Retrofit
- Create Adapter for WordPress Android App
- Create instance of Retrofit Library to get all Post of WordPress
- Android studio wordpress api
Android для начинающих: использование REST API
Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)
Большинство из нас стали весьма жадны до новой информации, что в Интернете является такой важной частью нашей жизни. Поэтому создание приложений Android со статичным контентом может быть плохой идеей. Вместо этого вам следует рассмотреть возможность создания приложений, которые могут отображать свежий контент каждый раз, когда пользователь их открывает.
Это может звучать сложно, но с большим количеством сайтов, которые раскрывают свои ресурсы через REST API, на самом деле это довольно просто. (Смотрите руководство для начинающих по HTTP и REST для примера.)
В этом уроке я расскажу вам, как использовать классы и методы, доступные в Android SDK, для подключения к удаленным веб-серверам и взаимодействия с ними с использованием их REST API.
1. Включение доступа к Интернету
Использование REST API, очевидно, связано с использованием Интернета. Тем не менее, приложения Android могут получить доступ к Интернету только в том случае, если у них есть разрешение android.permission.INTERNET . Поэтому перед началом написания любого сетевого кода вы должны убедиться, что в файле манифеста вашего проекта присутствуют следующие uses-permission теги:
Поскольку android.permission.INTERNET не считается опасным разрешением, вам не нужно запрашивать его во время выполнения на устройствах с уровнем API 23 или выше.
2. Создание фоновых потоков
Платформа Android не позволяет выполнять сетевые операции в основном потоке приложения. Поэтому весь ваш сетевой код должен принадлежать фоновому потоку. Самый простой способ создать такой поток — использовать метод execute() класса AsyncTask . В качестве единственного аргумента execute() ожидает объект Runnable .
Если вы хотите узнать больше о выполнении операций в фоновом потоке, я предлагаю вам прочитать этот учебник о фоновых операциях из серии Android для начинающих.
3. Создание HTTP-соединения
Используя метод openConnection() класса URL , вы можете быстро настроить соединение с любой конечной точкой REST. Возвращаемое значение openConnection() должно быть передано в экземпляр HttpURLConnection или HttpsURLConnection , в зависимости от доступа к конечной точке через HTTP или HTTPS. Оба HttpURLConnection и HttpsURLConnection позволяют выполнять такие операции, как добавление заголовков запросов и чтение ответов.
В следующем фрагменте кода показано, как настроить соединение с корневой конечной точкой API GitHub:
Обратите внимание, что HttpsURLConnection является подклассом класса HttpURLConnection .
4. Добавление заголовков запросов
Большинство веб-сайтов, предлагающих REST API, хотят иметь возможность однозначно идентифицировать ваше приложение. Самый простой способ помочь им сделать это — включить уникальный заголовок User-Agent во все ваши запросы.
Чтобы добавить заголовок User-Agent в ваш запрос, вы должны использовать метод setRequestProperty() объекта HttpURLConnection . Например, вот как вы устанавливаете заголовок User-Agent в my-rest-app-v0.1:
Вы можете добавить несколько заголовков к своему запросу, вызвав несколько раз метод setRequestProperty() . Например, следующий фрагмент кода добавляет заголовок Accept и кастомный заголовок Contact-Me :
5. Чтение ответов
После того как вы передали все заголовки запросов, вы можете проверить, есть ли у вас валидный ответ, используя метод getResponseCode() объекта HttpURLConnection .
Если класс HttpURLConnection получает код ответа на перенаправление, например 301, он автоматически обрабатывает его и следует за перенаправлением. Поэтому, как правило, вам не нужно будет писать дополнительный код для проверки перенаправления.
В случае отсутствия ошибок вы можете теперь вызвать метод getInputStream() , чтобы получить ссылку на входящий поток соединения.
Большинство REST API в наши дни возвращают данные, отформатированные как документы JSON. Поэтому, вместо прямого чтения из объекта InputStream , я предлагаю вам создать для него InputStreamReader .
6. Разбор JSON ответов
Android SDK имеет класс JsonReader, который позволяет легко разбирать документы JSON. Вы можете создать новый экземпляр класса JsonReader , передав объект InputStreamReader его конструктору.
То как вы извлекаете определенную часть информации из документа JSON, зависит от его структуры. Например, документ JSON, возвращаемый корневой конечной точкой REST API GitHub, выглядит следующим образом:
Как вы можете видеть, ответ — это только один большой объект JSON, содержащий несколько ключей. Чтобы извлечь из него значение с именем organization_url, вам нужно будет написать следующий код:
Вышеупомянутый код обрабатывает ответ JSON как поток токенов. Поэтому он потребляет очень мало памяти. Однако, поскольку он должен обрабатывать каждый отдельный токен один за другим, он может оказаться медленным при обработке больших ответов.
После того как вы извлечете всю необходимую информацию, вы всегда должны вызвать метод close() для объекта JsonReader , чтобы он освобождал все сохраненные ресурсы.
Вы также должны закрыть соединение, вызвав метод disconnect() объекта HttpURLConnection .
7. Использование разных HTTP методов
HTTP-интерфейсы REST используют методы HTTP для определения типа операции, которая должна выполняться над ресурсом. На предыдущих шагах мы использовали метод HTTP GET для выполнения операции чтения. Поскольку класс HttpURLConnection использует по умолчанию метод GET , нам не нужно было его явно указывать.
Чтобы изменить метод HTTP вашего объекта HttpURLConnection , вы должны использовать его метод setRequestMethod() . Например, следующий фрагмент кода открывает соединение с конечной точкой, принадлежащей httpbin.org, и устанавливает свой HTTP-метод в POST :
Как вы уже знаете, POST -запросы используются для отправки данных на сервер. При записи в выходной поток соединения вы можете легко добавить любые данные в тело запроса POST . Однако, прежде чем вы это сделаете, вы должны убедиться, что вы вызываете метод setDoOutput() объекта HttpURLConnection и передаете ему значение true .
В следующем фрагменте кода показано, как отправить на сервер простую пару «ключ-значение»:
8. Кэширование ответов
Всегда рекомендуется кэшировать ответы HTTP. Таким образом, вы можете не только сократить потребление пропускной способности вашего приложения, но и сделать его более отзывчивым. Начиная с уровня API 13, Android SDK предлагает класс HttpResponseCache , который позволяет легко реализовать кэширование без каких-либо изменений в вашей сетевой логике.
Чтобы установить кэш для вашего приложения, вы должны вызвать метод install() класса HttpResponseCache . Метод ожидает абсолютный путь, указывающий, где должен быть установлен кеш, и число, определяющее размер кеша. Вы можете использовать метод getCacheDir() , если вы не хотите указывать абсолютный путь вручную.
В следующем фрагменте кода устанавливается кеш размером 100 000 байт:
Как только кеш установлен, класс HttpURLConnection начинает использовать его автоматически. Чтобы проверить, работает ли ваш кеш, вы можете использовать его метод getHitCount() , который возвращает количество HTTP-ответов, которые были отправлены из кеша.
Заключение
Существуют тысячи REST API-интерфейсов, которые вы можете свободно использовать в своих приложениях для Android. Используя их, вы можете сделать ваше приложение более информативным, интересным и многофункциональным. В этом уроке вы узнали, как использовать класс HttpURLConnection для использования таких REST API. Вы также узнали, как создать кеш ответов HTTP, который снижает использование потребление сетевого трафика вашим приложением.
Если вы считаете, что использование HttpURLConnection слишком сложное, вам следует обратить внимание на сторонние библиотеки, такие как например, Volley. Библиотеки, подобные этой, используют класс HttpURLConnection внутри, но предоставляют множество удобных методов, которые позволяют сделать ваш код более кратким и читаемым.
Чтобы узнать больше о работе с сетью на платформе Android, вы можете обратиться к руководству по сетевым операциям Android.
Источник
NPLIX
Search This Blog
WordPress Android App with REST API And Retrofit
What is Retrofit?
If you want to know about Retrofit, I would like to give you just a simple one-line explanation of the Retrofit. It is a library which converts your REST HTTP request to Java interface. We will learn how we can do all these stuff using some very simple steps.
Further, you can check the Retrofit Library here.
So, In this tutorial, we will use the Retrofit to retrieve all post and there except ( A short Description of Post) form a WordPress website.
Prerequisite for using the Retrofit for WordPress Android App
There is some prerequisite for creating the WordPress, which is given below.
- There must be REST API is active on your WordPress Website or blog
- Retrofit should be added to your project as dependency
Check if your WordPress site has the REST API by putting the below URL into your favorite browser.
If REST API is working on your site it displays the all available route on your website for REST API.
Next, we have to add the Retrofit Library to our Project level build.gradle file as given below.
Create Layout file for WordPress Android App
We required two layout files for this sample Demo App to use the WordPress REST API by using the Retrofit library. Below is the layout files for our demo app.
postitem.xml
activity_main.xml
Create POJO of WordPress Website REST API
We need to create the POJO for our WordPress Website, but we all know there is the huge number of field and creating the exact POJO for all the field are very difficult. So for creating the POJO, we have a very simple way. You can go to jsonschema2pojo Website, it is a simple tool which will create the POJO from your JSON data.
To get the JSON data of your website you can use the Postman for Chrome and you can get the desktop version from here.
So getting the JSON data of your website you can put the «http://www.pgtfb.com/wp-json/wp/v2/posts»
Copy the extract JSON data and post on the website on JSON input field and then click on Preview button. You can see the output given below.
Even if you want you can download the all generated Java file into the zipped format and extract at your Java source code directory.
Create the Service for WordPress Using Retrofit
Next, We have to create a service to get all posts from WordPress Website. So now create or modify the WordPress Service class as given below.
The above class will fetch the all the post from given website.
In the above example we are using @GET(«wp/v2/posts») this is the route after the base URL. This will give as 10 recent posts because WordPress by default gives 10 posts.
If you want to play with the other option of the WordPress REST API you can refer the WordPress official tutorial about RESET API.
This Call
> getAllPost(); the method will get automatically mapped with our response from the Retrofit Library and return the List of Post.
A sample Post class will look like as given below. However, exact Post class depends on your website, that you gave as input on the jsonschema2pojo like given below.
Create Adapter for WordPress Android App
This is the simple RecyclerView Adapter which we will use to show the post details on RecyclerView.
PostAdapter.java
Create instance of Retrofit Library to get all Post of WordPress
First of all, we need to do the initialization of our basic UI component inside the onCreate method of our Main Activity.
Next, We have to create the instance of Retrofit like given below.
Create the service by mapping the request with our WordPress Service Interface.
Call the getAllPost method of WordPress Service to retrieve all post and store the output into call list variable.
Using below method we need to enqueue the request to get the all the post.
That’s all we required to create the WordPress Android App using Retrofit. Below is the full source code of the main activity.
Now, we are ready to test our WordPress Android App using the Retrofit Library. If you run you will see the output as given below.
Источник
Android studio wordpress api
Integrate your wordpress.com website into Android app
Update @ 2015.07.10 — 9.00 AM
- รองรับ tag : ol, ul, li
- รองรับ href แบบ Text และ Image
โค้ดชุดนี้จะผูกข้อมูลอยู่กับเว็บ wirunedayoblog.wordpress.com ที่เป็นเว็บทดสอบ ถ้าจะนำไปใช้ก็ให้เปลี่ยนเป็นของตัวเอง สามารถไปเปลี่ยนได้ที่คลาส App ตรงสตริง «../wirunedayoblog.wordpress.com ให้นำชื่อ หรือ id ของเว็บตนเองมาใส่แทนตัวเลข
ในกรณีที่ต้องการใช้เว็บไซต์ที่ใช้ wordpress.org ให้ทำการตัดตั้งปลั๊กอิน Jetpack ของ Automattic และลิงก์ Plugin ให้เรียบร้อยหลังจากนั้นเปิดใช้งาน JSON API ใน Jetpack Setting ก็สามารถใช้งานร่วมกับแอปนี้ได้เช่นกัน
โค้ดโปรเจกต์ตอนนี้สามารถดึงข้อมูลรายการโพสทั้งหมดมาแสดงได้ และกดที่รายการเพื่อแสดงโพสแบบละเอียดได้ (ยังไม่ได้ทำ Comment) ส่วนเสริมอื่นๆ ก็จะมี การ Swipe Down to Refresh ที่สามารถโหลดโพสเพิ่มเติมได้ (วิธีใช้ก็แค่เปิดแอปแล้วเอานิ้วจิ้ม + ดึงให้มีลูกศรหมุนออกมา เหมือนเวลารีเฟรชในแอปเฟซบุ๊ค) แต่โค้ดมันอาจจะซับซ้อนไปสักหน่อย แถมผูกกับหลายๆ ไลบรารี่ เอาไปดูก็น่าจะงงกันเลย (เดี๋ยวจะพยายามพิมพ์คำอธิบายโค้ดแล้วอัพเดทเพิ่มเติม)
การแสดงผลตอนนี้รองรับเพียงแนวตั้งเท่านั้น ถ้าต้องการให้รองรับแนวนอนด้วยก็แค่ไปเซ็ต orientation ใน Manifest แต่สิ่งที่จะตามมาคือ เวลาหมุนจอ Activity จะถูกทำลายทิ้งและสร้างใหม่ ทำให้จำเป็นต้อง Call HTTP GET หลายครั้ง (เปลืองเน็ต) แต่ก็มีตัวช่วยเพียงแค่ใช้ savedInstanceState ให้เป็น (เดี๋ยวจะทำให้ภายหลังครับ) ซึ่งเจ้า savedInstanceState เราสามารถบันทึกข้อมูลที่ต้องการไว้ได้แม้ Activity จะถูกทำลาย การบันทึกข้อมูลนั้นจะอยู่ในรูปแบบจำกัดอย่าง String, int, float, boolean, byte ง่ายๆ คือใช้ได้กับตัวแปรพื้นฐาน กับอ็อบเจกต์อีก 1 ประเภทคือ Parcelable ซึ่งการใช้ Parcelable ก็ไม่ยากเสิร์ชหาในเน็ตแปปเดียวก็เจอ จะหาไลบรารี่มาช่วยก็มีเยอะแยะเลยจ้า
เมื่อสร้างโปรเจกต์รองรับเวอร์ชันเก่าๆ Android Studio จะใส่ไลบรารี่นี้มาให้อัตโนมัติ เพื่อให้แอปของเรารองรับเวอร์ชันเก่า ๆ ซึ่งในที่นี้เลือกขั้นต่ำสุดคือประมาณเวอร์ชัน 4 แล้วเราใช้ตรงไหน ? เราจะใช้ที่ Activity ครับ เวลาสร้าง Activity จะสืบทอดคลาสจาก AppCompatActivity แทน Activity ปกติ ถ้าเราต้องการใช้งาน ActionBar จำเป็นต้องเรียก getSupportActionBar(); แทน getActionBar(); ในโปรเจกต์นี้จะมี 2 คลาสที่ใช้คือ
- FeedActivity : เป็น Home Activity ที่จะดึงโพสมาจาก WordPress
- PostActivity : เป็น Activity สำหรับแสดงข้อมูลของโพสทั้งหมด รวมถึง Comment ด้วย (แต่ตอนนี้ยังไม่เสร็จ)
ปกติแล้วเราจะใช้ ListView หรือ GridView แต่ในเวอร์ชันใหม่ๆ ได้มีการเพิ่ม RecyclerView มาแทน ListView และ GridView เพื่อบังคับให้นักพัฒนาต้องเขียน Adapter ตามคอนเซ็ปต์ Object Pooling และใช้ ViewHolder ซึ่งวิธีใช้จะซับซ้อนขึ้นเล็กน้อย แต่การใช้งานค่อนข้าง Flexible เลยทีเดียว ในโปรเจกต์นี้จะมี 1 คลาสที่ใช้คือ FeedActivity + activity_feed.xml
ในการแสดงข้อมูลของโพสต้องการให้ซ่อน ActionBar เวลา Scroll เพื่ออ่านเนื้อหา โดยการรับอีเว้นท์ Scroll นั้นจำเป็นจะต้องนำไปฝังการตรวจสอบไว้กับพวก ScrollView หรือ ListView ในที่นี้ฝังไว้กับ RecyclerView ซึ่งเวลาจะฝังลงใน RecyclerView จำเป็นต้องเปลี่ยนไปใช้ ObservableRecyclerView แทน การเขียนโค้ดภายใน Adapter ของ ObservableRecyclerView จะเหมือนกับ RecyclerView ทุกอย่าง ในโปรเจกต์นี้จะมี 1 คลาสที่ใช้คือ PostActivity + activity_post.xml
CardView มีคุณสมบัติคล้าย FrameLayout ที่จะซ้อน View เป็น Layer แต่จะเพิ่มความสามารถเข้ามา เช่น การใส่เงา การทำขอบมน เมื่อติดตั้งแล้วสามารถใช้ใน xml ได้เลย ในโปรเจกต์นี้จะมี 1 ไฟล์ที่ใช้คือ layout_feed_item.xml
เป็นไลบรารี่สำหรับงาน HTTP Request พวก GET, POST ในที่นี้นำมาใช้แทน OkHttp เนื่องจากอยู่ดีๆ OkHttp ติดต่อกับ WordPress REST API ไม่ได้ซะงั้น จึงจำใจต้องย้ายค่าย จริงๆ มีอีกค่ายคือ loopj แต่ยังไม่ได้ลอง ในการใช้งานจะแบ่งออกเป็น 2 ส่วนคือ Request คืองานที่ต้องการทำ กับ RequestQueue คือตัวจะการ Request ในโปรเจกต์นี้มีการใช้งาน Request 2 คลาสคือ FeedService และ PostService เพื่อสร้าง HTTP GET Request โพสจาก WordPress REST API และ ใช้งาน RequestQueue 1 คลาสคือ App ที่นำ RequestQueue ไว้ที่ App ก็เพื่อให้ Service ทั้งหมดเรียกตัวจัดการ Queue แค่ที่เดียว ไม่ต้องไปประกาศของตัวเอง เนื่องจากคลาส App ทำตัวเองเป็น Static Singleton Instance สามารถเรียกจากคลาสใดก็ได้
สั้นๆ ง่ายๆ คือไว้ใช้โหลดรูปจาก URL มีใช้ใน Adapter ต่างๆ และ ImageHeaderView, ImageContentView
Источник