Android development guide part 2: create your own RSS reader -[AndroidTutor2018]

AndroidTutor2018- Attention all your aspiring programmers, we’ve got the second portion of our Android development series coming up for you. After our first part introduced you to the programming environment for Android, we’re going to show you how to setup your own RSS feed. We’ll be going over some more basic principles and concepts while we walk you through this tutorial.

© AndroidPIT
If you still have the “Hello AndroidPIT” app project from the first part of the series, you can continue to work with it, otherwise you’ll need to go ahead and start a new project in Android Developer Studio.
Rich Site Summary (RSS)
First of all, what is an RSS feed? Many of you read RSS feeds on the daily in a reader app either on your PC or mobile device. In order to program an app that can display an RSS feed, you should know a little bit of a background into what RSS actually is. Wikipedia gives a pretty good over of RSS.
For example, the RSS feed from AndroidPIT can be found here: https://www.androidpit.com/feed/main.xml
Simply put, RSS is an XML file. XML is made principally to be display text and are designed for machine readability. Our first goal is to write an app which calls upon the XML file of the AndroidPIT feeds and to display it appropriately in our “Hello AndroidPIT” app.
Represent the RSS Feed
Next, we’ll show you how to bring the XML file onto the screen of your Android device. We’ll be continuing on from our first app from the first part of the series and we’ll modify it for our purposes.
On Android, the layout is usually defined via XML. So, if you plan on spending a bit more time around on the development side of things with Android, it would be wise to invest a little time in learning XML as it is a format you’ll continually be using.
The layout is stored in the res / layout folder. If you open up the fragment_main.xml in your project, you’ll be able to see the XML layout file along with a preview of it.

Our project from the first part of the series. / © AndroidPIT
We want to replace the “Hello AndroidPIT!” with our RSS Feed. In order to do this, we to give TextView an identifier on what we want it to show. In this case, the android: id attribute will do the trick:
android_id="@+id/rss_feed"
android_text="@string/hello_world"
android_layout_width="wrap_content"
android_layout_height="wrap_content" />After we provide the Textview with an id, we have to find the ones we want to use and an add them to our Placeholder fragment segment. For this purpose we use the method findViewById. It should like this within the onCreateView method:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
mRssFeed = (TextView) rootView.findViewById(R.id.rss_feed);
return rootView;
}To retrieve the RSS feed at the start of the app, we need the following onStart method:
@Override
public void onStart() {
super.onStart();
InputStream in = null;
try {
URL url = new URL("https://www.androidpit.com/feed/main.xml");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
in = conn.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
for (int count; (count = in.read(buffer)) != -1; ) {
out.write(buffer, 0, count);
}
byte[] response = out.toByteArray();
String rssFeed = new String(response, "UTF-8");
mRssFeed.setText(rssFeed);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}If you don’t understand the source code, don’t worry and just copy and paste what we’ve done. To understand it in depth, you’ll need to take up Java and learn the programming language.
If you try running the app right now, it will begin to compile but will crash at some point.
In app development, it is necessary that you can learn how to deal with crashes and what exactly they mean. If you open logcat at the same time as you run your application, it will log all the messages and error messages output by the application. If you do it after running what we’ve done so far, you should have the following error message:
com.rockylabs.androidpitrss E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.rockylabs.androidpitrss, PID: 14367
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rockylabs.androidpitrss/com.rockylabs.androidpitrss.MainActivity}:
android.os.NetworkOnMainThreadExceptionSo, what happened? Your application tried in the main thread to access the Internet, however, if the request takes too long, the application stops responding and an error message is issued. To avoid this, Android has been rigged to crash instead of hang indefinitely.
On Android, we’ll need to work in a world of asynchronous workflows. This means that when a requests is made to the system, it will run in the background and a notification will be returned to your as soon as the task is complete. This why, you know when your threads (threads of execution) are working and learn from it.
The standard in all tasks is the user interface thread, called UI thread for shot. In our case above, if you’re trying to access the internet and the server request takes too long, the interface gets hung up and cannot continue. As a result you get an Android error message that the application is not responding. This warning is also known as Application Not Responding (ANR). These type of messages should be avoided at all costs for reasons of user-friendliness.

© Creative Commons Attribution 2.5
Android provides a very simply way to handle this problem in the form of a different class called AsyncTask. You can then run a task in a background thread and run the result to the UI thread.
So, in our app, we want a to run a task with AsyncTask in the background. In the previous step, we have the source code for the onStart method inserted into our code. Now we need to separate the network and user interface, which is why we have created the method getAndroidPitRssFeed. This makes it easier to use source code several time rather than spending a lot of time copying and pasting. The getAndroidPitRssFeed method looks like this:
private class GetAndroidPitRssFeedTask extends AsyncTask {

@Override
protected String doInBackground(Void... voids) {
String result = "";
try {
result = getAndroidPitRssFeed();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}

@Override
protected void onPostExecute(String rssFeed) {
mRssFeed.setText(rssFeed);
}
}If we re-run the app, we will again produce a crash but this time will not because of a lack of authoruization as opposed to timing out. We haven’t set any permissions to access the Internet and as such, we cannot obtain the RSS feed.
If you had logcat open while running the app the last time, you’ll see the following entry:
Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)To set the Internet permissions, you’ll need to open the AndroidManifest.xml file. There you should see the following lines of code:
android_minSdkVersion="15"
android_targetSdkVersion="19" />
We will add the following line below them:




And voila! If you run the application, you’ll see that your App will run and start showing the XML of our RSS feed. As you certainly noticed, this will take some time to load. The entire feed is currently being loaded which can be a bit cumbersome. Later, we’ll show you how we can improve the user experience further by installing a progress indicator.

So far, so good. This is a definitely a moment to savor: grab a coffee, pat yourself on the back, and get a good stretch in: you’ve completed your first objective of displaying the RSS feed of AndroidPIT on a mobile device.



However, nobody wants to look at the gibberish that is known as XML format, so we’ll need to clean that up a bit. As well, we cannot go past the edge of the screen and are unable to scroll down at this point.
ScrollView
The solution to the above problem is to add the scrollview component that is already available in the Android SDK:
android_layout_width="match_parent"
android_layout_height="match_parent">

android_id="@+id/rss_feed"
android_text="@string/hello_world"
android_layout_width="wrap_content"
android_layout_height="wrap_content" />
In the next step, you will learn how the XML file is read so that we can modify it a bit and extract the titles of articles and present them in a list, so it is much cleaner for people to view.

The fruits of our labors: XML displayed without being able to scroll. / © AndroidPIT
XML reading
Our next goal is to make the title of each article, inside the tags, be displayed. If we look at the RSS feed (above image), it is found inside the <rss> portion of the code and right after the <channel> tag. For simplicity, we’ll just ignore all the other tags for now. Once we have worked through the whole XML file, we’ll have a better understanding of what they’re used for.<br/> In order to handle an XML file, we need to search the mumbo jumbo and pull the information that we require from it. Fortunately for us, somebody has already created a tool that does this for us. As such, we will use a parser to extract the information that we need and will use XmlPullParser from the Android SDK.<br/> The analysis of the XML file will go in the following stages:<br/> START_DOCUMENT is for the beginning of the document, when the parser has yet to read anything yet.<br/> START_TAG is what starts the parser<br/> TEXT is when the parser is busy with content<br/> ENG_TAG is when the parser is on the end tag<br/> END_DOCUMENT is when the document is over and there is no more parsing options available.<br/> First, we need the parser to create:<br/> XmlPullParserFactory factory = XmlPullParserFactory.newInstance();<br/> XmlPullParser xpp = factory.newPullParser();Then we have to give the parser a source to parse. We assign it to the string which we’ve downloaded from the server and are currently displaying via TextView.<br/> As we previously mentioned, we want to read the RSS feed, channel, open item, and title tags in order to read the title of the article. We will ignore all the rest. So we add readRSS, read channel, ReadItem, and read title. We’ll do that by issuing the following code:<br/> private List<String> readRss(XmlPullParser parser)<br/> throws XmlPullParserException, IOException {<br/> List<String> items = new ArrayList<>();<br/> parser.require(XmlPullParser.START_TAG, null, "rss");<br/> while (parser.next() != XmlPullParser.END_TAG) {<br/> if (parser.getEventType() != XmlPullParser.START_TAG) {<br/> continue;<br/> }<br/> String name = parser.getName();<br/> if (name.equals("channel")) {<br/> items.addAll(readChannel(parser));<br/> } else {<br/> skip(parser);<br/> }<br/> }<br/> return items;<br/> }Now we need to implement read channel to read out the contents, the rest we will leave aside!:<br/> private List<String> readChannel(XmlPullParser parser)<br/> throws IOException, XmlPullParserException {<br/> List<String> items = new ArrayList<>();<br/> parser.require(XmlPullParser.START_TAG, null, "channel");<br/> while (parser.next() != XmlPullParser.END_TAG) {<br/> if (parser.getEventType() != XmlPullParser.START_TAG) {<br/> continue;<br/> }<br/> String name = parser.getName();<br/> if (name.equals("item")) {<br/> items.add(readItem(parser));<br/> } else {<br/> skip(parser);<br/> }<br/> }<br/> return items;<br/> }ReadItem is also necessary:<br/> private String readItem(XmlPullParser parser) throws XmlPullParserException, IOException {<br/> String result = null;<br/> parser.require(XmlPullParser.START_TAG, null, "item");<br/> while (parser.next() != XmlPullParser.END_TAG) {<br/> if (parser.getEventType() != XmlPullParser.START_TAG) {<br/> continue;<br/> }<br/> String name = parser.getName();<br/> if (name.equals("title")) {<br/> result = readTitle(parser);<br/> } else {<br/> skip(parser);<br/> }<br/> }<br/> return result;<br/> }Almost there, we just have get read title to pull the title:<br/> // Processes title tags in the feed.<br/> private String readTitle(XmlPullParser parser)<br/> throws IOException, XmlPullParserException {<br/> parser.require(XmlPullParser.START_TAG, null, "title");<br/> String title = readText(parser);<br/> parser.require(XmlPullParser.END_TAG, null, "title");<br/> return title;<br/> }And the text in the <title> day :<br/> private String readText(XmlPullParser parser)<br/> throws IOException, XmlPullParserException {<br/> String result = "";<br/> if (parser.next() == XmlPullParser.TEXT) {<br/> result = parser.getText();<br/> parser.nextTag();<br/> }<br/> return result;<br/> }With this method, the rest of the tags will be skipped:<br/> private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {<br/> if (parser.getEventType() != XmlPullParser.START_TAG) {<br/> throw new IllegalStateException();<br/> }<br/> int depth = 1;<br/> while (depth != 0) {<br/> switch (parser.next()) {<br/> case XmlPullParser.END_TAG:<br/> depth–;<br/> break;<br/> case XmlPullParser.START_TAG:<br/> depth++;<br/> break;<br/> }<br/> }<br/> }Now you are almost professionals what the XML parsing concerns! In the next step we will issue the title of the item in a list.<br/> List Fragment<br/> In the Android SDK there is a class called list fragment that will help us with handling lists.<br/> Since we already have a list of text strings, which we have extracted from the XML file, we can use a practical standard feature of Android with the adapter to represent the title. An adapter is a kind of bridge between the data that we want to present and the TextViews which represents the data.<br/> With an adapter, we can use a TextView create method for each title from our list. You must use Placeholder fragment to accomplish this:<br/> public static class PlaceholderFragment extends ListFragment {Finally, we must still use AsyncTask to be adapted so that our parser can work<br/> @Override<br/> protected List<String> doInBackground(Void... voids) {<br/> List<String> result = null;<br/> try {<br/> String feed = getAndroidPitRssFeed();<br/> result = parse(feed);<br/> } catch (XmlPullParserException e) {<br/> e.printStackTrace();<br/> } catch (IOException e) {<br/> e.printStackTrace();<br/> }<br/> return result;<br/> }<br/> <br/> @Override<br/> protected void onPostExecute(List<String> rssFeed) {<br/> setListAdapter(new ArrayAdapter<>(<br/> getActivity(),<br/> android.R.layout.simple_list_item_1,<br/> android.R.id.text1,<br/> rssFeed));<br/> }If you try running your app now, you should first see a progress indicator while the RSS feed is downloaded from the server and then a list of all the titles from the feed will be shown as below.<br/> <br/> And there we go! A progress indicator and the title from the XML file. / © AndroidPIT <br/> Summary<br/> WHEW. We know that this guide is long and extensive and a big step compared to our first exercise. But if you have managed to get through of the entire thing, you should be very proud of what you’ve done and amazed on how much you’ve learned. Even if you haven’t understood every single minute detail, your understanding on how to program within Android will grow over time. The more you practice with Android development, the better you’ll come to understanding these type of things.<br/> Our self-programmed feed reader works, but is not very useful as it currently just shows the article titles. So, in our next exercise, we’ll extend the functionality and make it so that we can read the introduction of our articles when we tap on the title.<br/> What do you think? What improvements would you like to see in the RSS app tutorial? Let us know if the comments!<br/> 50 Shares <br/> Share on Facebook Tweet on Twitter Share on Google+ 50 Shares <br/> More from the web<br/> <br/> These 8 Supplements Will Strengthen And Grow Your PhysiqueBodybuilding.com<br/> Monterey Park, California: This Brilliant Company Is Disrupting a $200 Billion IndustryEverQuote Insurance Quotes<br/> These Guys Are Putting Glasses Stores out of BusinessGlassesUSA.com<br/> New Law Allows You To Be Certified To Carry Concealed Online!National Concealed<br/> by Taboola by Taboola Sponsored Links Sponsored Links Promoted Links Promoted Links More from the web<br/> <br/> These 8 Supplements Will Strengthen And Grow Your PhysiqueBodybuilding.com<br/> Monterey Park, California: This Brilliant Company Is Disrupting a $200 Billion IndustryEverQuote Insurance Quotes<br/> These Guys Are Putting Glasses Stores out of BusinessGlassesUSA.com<br/> New Law Allows You To Be Certified To Carry Concealed Online!National Concealed<br/> by Taboola by Taboola Sponsored Links Sponsored Links Promoted Links Promoted Links <br/> 11 comments <br/> Write a comment! <br/> Write new comment: <br/> SubmitCancel <br/> <br/> <br/> <br/> 1 Tom Travers Sep 28, 2016 Link to comment <br/> It would be more awesome if the tutorial had a second part teaching feed images and push notifications on new feeds. Awesome tutorial!<br/> 0 <br/> Reply <br/> <br/> <br/> 1 Nabeel Siddiqui Nov 28, 2015 Link to comment <br/> Thanks<br/> 0 <br/> Reply <br/> <br/> <br/> 1 Yasien Adams Aug 19, 2015 Link to comment <br/> Hello, I know this an old article, but im hoping someone out there will be able reply.<br/> <br/> I seem to be missing a couple of steps, and ive gone over the tuts several times.<br/> <br/> 1/ No correlation from part 1 and part 2, because in the beggining of part 2, you start to talk about a fragment placeholder. although i tried to follow the tut correctly, im not sure its 100%<br/> <br/> so at the end of it, the getAndroidPitRssFeed, and mRssFeed do not resolve.<br/> <br/> Is the fragment code missing?<br/> <br/> Also, the link to download the source code is no longer working.<br/> <br/> Thanks.... newbie :)<br/> 0 <br/> Reply <br/> <br/> <br/> 1 Olga Sopilnyak Aug 20, 2015 Link to comment <br/> Here's a working link to the source code: github.com/z1ux/AndroidPITRSS<br/> 0 <br/> Reply <br/> <br/> <br/> 1 Per Hansen Jan 13, 2015 Link to comment <br/> How can i add descriptions to the list? Or make the headlines clickable to read descriptions?<br/> 0 <br/> Reply <br/> <br/> <br/> 1 Osondu Tochukwu Jul 11, 2014 Link to comment <br/> How do I download te source code??<br/> 0 <br/> Reply <br/> <br/> <br/> 1 Osondu Tochukwu Jul 11, 2014 Link to comment <br/> How do I download te source code??<br/> 0 <br/> Reply <br/> <br/> <br/> 1 JonatanPN Apr 14, 2014 Link to comment <br/> Hello, great tutorial about how make and app with RSS.<br/> <br/> My app work after download your source code because in the tutorial no appear where I have to enter the codes.<br/> <br/> I want know if you on the next month go to make the 3rd part for open the posts.<br/> <br/> and also I have some suggestions.<br/> <br/> 1.Miniature of image what are on the topic.<br/> <br/> 2. See what articles are read or not and option for mark all as read<br/> <br/> 3. Push notifications when new topic are published and the users can select when want update if are or not news topics.<br/> <br/> You can use "feed.nu" for make an app with this options, but i want make by me with an appear design.<br/> <br/> Regards and great work.<br/> 0 <br/> Reply <br/> <br/> <br/> 2 Kuoyhout Feb 12, 2014 Link to comment <br/> please create a android development guide about the effective & best way to load image from website or link, handle it while it is loading, & display it in grid view or list view on slow device without crash<br/> 0 <br/> Reply <br/> <br/> <br/> 7 antonio-rodrigues Jan 18, 2014 Link to comment <br/> If you been working on this, here's a link to the app's source code posted by Henrique:<br/> https://github.com/HenriqueRocha/AndroidPITRSS<br/> 1 Nhat Luu <br/> Reply <br/> <br/> <br/> 7 antonio-rodrigues Jan 3, 2014 Link to comment <br/> Hi, Henrique! Nice, simple yet very practical tutorial. Thank you for your effort ;-)<br/> <br/> Found a typo: "This why, you know when your threads (threads of execution) are working and learn from it." should be "This *way*, you know when your threads (threads of execution) are working and learn from it.".<br/> 1 Nhat Luu <br/> Reply <br/> Write a comment! <center> <td> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 1 --> <ins class="adsbygoogle" style="display:inline-block;width:300px;height:250px" data-ad-client="ca-pub-9959096915624273" data-ad-slot="7547056108"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 1 --> <ins class="adsbygoogle" style="display:inline-block;width:300px;height:250px" data-ad-client="ca-pub-9959096915624273" data-ad-slot="7547056108"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></td> <script type='text/javascript'> var obj0=document.getElementById("post11706792612850482582"); var obj1=document.getElementById("post21706792612850482582"); var s=obj1.innerHTML; var t=s.substr(0,s.length/2/2); var r=t.lastIndexOf("<br>"); if(r>0) {obj0.innerHTML=s.substr(0,r);obj1.innerHTML=s.substr(r+4);} </script></center></div> <script type='text/javascript'> function insertAfter(addition,target) { var parent = target.parentNode; if (parent.lastChild == target) { parent.appendChild(addition); } else { parent.insertBefore(addition,target.nextSibling); } } var adscont = document.getElementById("adsense-content"); var target = document.getElementById("adsense-target"); var linebreak = target.getElementsByTagName("br"); if (linebreak.length > 0){ insertAfter(adscont,linebreak[0]); } </script> <center> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 8 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9959096915624273" data-ad-slot="5712667047" data-ad-format="link"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </center> <div style='clear: both;'></div> <div class='tombol-berbagi-arlina'> <div class='tombol-berbagi-arlina-fb'> <a class='tombol-berbagi-fb' href='http://www.facebook.com/sharer.php?u=https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html&title=Android development guide part 2: create your own RSS reader -[AndroidTutor2018]' rel='nofollow' target='_blank'></a> <a class='tombol-berbagi-fb-label' href='http://www.facebook.com/sharer.php?u=https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html&title=Android development guide part 2: create your own RSS reader -[AndroidTutor2018]' rel='nofollow' target='_blank'> Share on Facebook</a> </div> <div class='tombol-berbagi-arlina-tw'> <a class='tombol-berbagi-tw' data-text='Android development guide part 2: create your own RSS reader -[AndroidTutor2018]' data-url='https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html' href='http://twitter.com/share' rel='nofollow' target='_blank'></a> <a class='tombol-berbagi-tw-label' data-text='Android development guide part 2: create your own RSS reader -[AndroidTutor2018]' data-url='https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html' href='http://twitter.com/share' rel='nofollow' target='_blank'>Share on Twitter</a> </div> <div class='tombol-berbagi'> <a class='tombol-berbagi-gp' href='https://plus.google.com/share?url=https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html' rel='nofollow' target='_blank'></a> <a class='tombol-berbagi-gp-label' href='https://plus.google.com/share?url=https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html' rel='nofollow' target='_blank'>Share on Google+</a> </div> <div class='tombol-berbagi'> <a class='tombol-berbagi-lin' href='http://www.linkedin.com/shareArticle?mini=true&url=https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html&title=Android development guide part 2: create your own RSS reader -[AndroidTutor2018]&summary=' rel='nofollow' target='_blank'></a> <a class='tombol-berbagi-lin-label' href='http://www.linkedin.com/shareArticle?mini=true&url=https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html&title=Android development guide part 2: create your own RSS reader -[AndroidTutor2018]&summary=' rel='nofollow' target='_blank'>Share on LinkedIn</a> </div> </div> <div class='berlangganan-box'> <form action='https://feedburner.google.com/fb/a/mailverify' method='post' onsubmit='window.open('https://feedburner.google.com/fb/a/mailverify?uri=Maspardi', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true' target='popupwindow'> <p>Subscribe to receive free email updates:</p><p><input class='email-address' name='email' placeholder='Your email address...' type='text'/></p><input name='uri' type='hidden' value='maspardi'/> <input name='loc' type='hidden' value='en_US'/> <p><input class='submit-email' type='submit' value='Subscribe'/></p> </form> </div> <div class='related-post' id='related-post'></div> <script type='text/javascript'> var labelArray = []; var relatedPostConfig = { homePage: "https://androidtutor2018.blogspot.com/", widgetTitle: "<h4>Related Posts :</h4>", numPosts: 5, summaryLength: 140, titleLength: "auto", thumbnailSize: 60, noImage: "http://3.bp.blogspot.com/-ltyYh4ysBHI/U04MKlHc6pI/AAAAAAAADQo/PFxXaGZu9PQ/s66-c/no-image.png", containerId: "related-post", newTabLink: false, moreText: "Read More...", widgetStyle: 2, callBack: function() {} }; </script> </div> </div> </article> <div class='comments' id='comments'> <a name='comments'></a> <h4> 0 Response to "Android development guide part 2: create your own RSS reader -[AndroidTutor2018]" </h4> <div id='Blog1_comments-block-wrapper'> <dl class='avatar-comment-indent' id='comments-block'> </dl> </div> <p class='comment-footer'> <div class='comment-form'> <a name='comment-form'></a> <h4 id='comment-post-message'>Post a Comment</h4> <div class='pesan-komentar'><p> </p></div> <a href='https://www.blogger.com/comment/frame/6909329576953681195?po=1706792612850482582&hl=en-GB' id='comment-editor-src'></a> <iframe allowtransparency='true' class='blogger-iframe-colorize blogger-comment-from-post' frameborder='0' height='410' id='comment-editor' name='comment-editor' src='' width='100%'></iframe> <!--Can't find substitution for tag [post.friendConnectJs]--> <script src='https://www.blogger.com/static/v1/jsbin/1466990918-comment_from_post_iframe.js' type='text/javascript'></script> <script type='text/javascript'> BLOG_CMT_createIframe('https://www.blogger.com/rpc_relay.html', '0'); </script> </div> </p> <div id='backlinks-container'> <div id='Blog1_backlinks-container'> </div> </div> </div> </div> </div></div> <!--Can't find substitution for tag [adEnd]--> </div> <div class='blog-pager' id='blog-pager'> <span id='blog-pager-newer-link'> <a class='blog-pager-newer-link' href='https://androidtutor2018.blogspot.com/2017/10/3-more-cool-things-your-android-can-do.html' id='Blog1_blog-pager-newer-link' title='Newer Post'>Newer Post</a> </span> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' href='https://androidtutor2018.blogspot.com/2017/10/android-vs-ios-things-uniquely-android.html' id='Blog1_blog-pager-older-link' title='Older Post'>Older Post</a> </span> <a class='home-link' href='https://androidtutor2018.blogspot.com/'>Home</a> </div> <div class='clear'></div> <div class='post-feeds'> <div class='feed-links'> Subscribe to: <a class='feed-link' href='https://androidtutor2018.blogspot.com/feeds/1706792612850482582/comments/default' target='_blank' type='application/atom+xml'>Post Comments (Atom)</a> </div> </div> </div></div> <div class='clear'></div> </div> </div> <!-- post wrapper end --> <!-- sidebar wrapper start --> <!-- sidebar wrapper start --> <aside id='sidebar-wrapper'> <div class='sidebar-container'> <div class='set set-1'> <div class='panel panel-1 section section' id='panel-1'><div class='widget HTML' data-version='1' id='HTML1'> <div class='widget-content'> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 1 --> <ins class="adsbygoogle" style="display:inline-block;width:300px;height:250px" data-ad-client="ca-pub-9959096915624273" data-ad-slot="7547056108"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class='clear'></div> </div></div> <div class='panel panel-2 section no-items section' id='panel-2'></div> <div class='panel panel-3 section no-items section' id='panel-3'></div> </div> <div class='clear'></div> <div class='sidebar section section' id='sidebar'><div class='widget BlogSearch' data-version='1' id='BlogSearch1'> <h2 class='title'>Search This Blog</h2> <div class='widget-content'> <div id='BlogSearch1_form'> <form action='https://androidtutor2018.blogspot.com/search' class='gsc-search-box' target='_top'> <table cellpadding='0' cellspacing='0' class='gsc-search-box'> <tbody> <tr> <td class='gsc-input'> <input autocomplete='off' class='gsc-input' name='q' size='10' title='search' type='text' value=''/> </td> <td class='gsc-search-button'> <input class='gsc-search-button' title='search' type='submit' value='Search'/> </td> </tr> </tbody> </table> </form> </div> </div> <div class='clear'></div> </div><div class='widget PopularPosts' data-version='1' id='PopularPosts1'> <h2>Popular Posts</h2> <div class='widget-content popular-posts'> <ul> <li> <div class='item-content'> <div class='item-title'><a href='https://androidtutor2018.blogspot.com/2017/10/how-to-charge-your-android-phone.html'>How to charge your Android phone battery faster -[AndroidTutor2018]</a></div> <div class='item-snippet'>AndroidTutor2018- We've all done it: you're getting ready to leave the house and you realize you've forgotten to charge your pho...</div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-content'> <div class='item-title'><a href='https://androidtutor2018.blogspot.com/2017/10/5-tips-and-tricks-to-make-waze-your.html'>5 tips and tricks to make Waze your best co-pilot -[AndroidTutor2018]</a></div> <div class='item-snippet'>AndroidTutor2018- Waze is one of the most popular driving apps today. Why? Because Waze chooses the best route for your trip based on distan...</div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-content'> <div class='item-title'><a href='https://androidtutor2018.blogspot.com/2017/10/root-for-xperia-z-this-is-how-you-do-it.html'>Root for Xperia Z: this is how you do it! -[AndroidTutor2018]</a></div> <div class='item-snippet'>AndroidTutor2018- After purchasing a new smartphone, most people don't waste time making the root their first priority. I successfully r...</div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-content'> <div class='item-title'><a href='https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html'>Android development guide part 2: create your own RSS reader -[AndroidTutor2018]</a></div> <div class='item-snippet'>AndroidTutor2018- Attention all your aspiring programmers, we’ve got the second portion of our Android development series coming up for you....</div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-content'> <div class='item-title'><a href='https://androidtutor2018.blogspot.com/2017/10/how-to-root-sony-xperia-z1-tutorial.html'>How to root Sony Xperia Z1: tutorial -[AndroidTutor2018]</a></div> <div class='item-snippet'>AndroidTutor2018- The Sony Xperia Z1 is already an excellent smartphone, but if you want to take things up a notch, such as installing the m...</div> </div> <div style='clear: both;'></div> </li> </ul> <div class='clear'></div> </div> </div><div class='widget BlogArchive' data-version='1' id='BlogArchive1'> <h2>Blog Archive</h2> <div class='widget-content'> <div id='ArchiveList'> <div id='BlogArchive1_ArchiveList'> <select id='BlogArchive1_ArchiveMenu'> <option value=''>Blog Archive</option> <option value='https://androidtutor2018.blogspot.com/2017/10/'>October (838)</option> </select> </div> </div> <div class='clear'></div> </div> </div><div class='widget HTML' data-version='1' id='HTML3'> <div class='widget-content'> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 2 --> <ins class="adsbygoogle" style="display:inline-block;width:300px;height:600px" data-ad-client="ca-pub-9959096915624273" data-ad-slot="6397625965"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class='clear'></div> </div><div class='widget Attribution' data-version='1' id='Attribution1'> <div class='widget-content' style='text-align: center;'> Powered by <a href='https://www.blogger.com' target='_blank'>Blogger</a>. </div> <div class='clear'></div> </div><div class='widget Navbar' data-version='1' id='Navbar1'><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d6909329576953681195\x26blogName\x3dTutorial+Android+2018\x26publishMode\x3dPUBLISH_MODE_BLOGSPOT\x26navbarType\x3dLIGHT\x26layoutType\x3dLAYOUTS\x26searchRoot\x3dhttps://androidtutor2018.blogspot.com/search\x26blogLocale\x3den_GB\x26v\x3d2\x26homepageUrl\x3dhttps://androidtutor2018.blogspot.com/\x26targetPostID\x3d1706792612850482582\x26blogPostOrPageUrl\x3dhttps://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html\x26vt\x3d-2081539521929305512', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe" }); } }); </script><script type="text/javascript"> (function() { var script = document.createElement('script'); script.type = 'text/javascript'; script.src = '//pagead2.googlesyndication.com/pagead/js/google_top_exp.js'; var head = document.getElementsByTagName('head')[0]; if (head) { head.appendChild(script); }})(); </script> </div></div> </div> </aside> <!-- sidebar wrapper end --> </div> <!-- content wrapper end --> <div class='clear'></div> <aside id='bottombar'> <div class='left section no-items section' id='left'></div> <div class='center section no-items section' id='center'></div> <div class='right section no-items section' id='right'></div> </aside> <!-- Jangan Menghapus Link Cridit Jika Tidak Mau Templete Anda Rusak --> <!-- footer wrapper start --> <footer id='footer-wrapper'> <div class='footer-left'> Copyright 2016 <a href='https://androidtutor2018.blogspot.com/'>Tutorial Android 2018</a> </div> <div class='footer-right'> Design:<a href='http://sugeng.id/' title='Mas Sugeng'> Mas Sugeng</a> | Powered: <a href='http://kutangg.blogspot.co.id/' title='Mas Pardi'>Mas Pardi</a> - <a href='http://blogger.com/' title='Blogger'>Blogger</a> </div> </footer> <!-- footer wrapper end --> <!-- wrapper end --> </div> <div class='back-to-top'><a href='#' id='back-to-top' title='back to top'> <i class='fa fa-angle-double-up fa-lg'></i> </a></div> <script> </script> <script src='https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js' type='text/javascript'></script> <script type='text/javascript'> //<![CDATA[ var ww=document.body.clientWidth;$(document).ready(function(){$(".nav li a").each(function(){if($(this).next().length>0){$(this).addClass("parent")}});$(".toggleMenu").click(function(e){e.preventDefault();$(this).toggleClass("active");$(".nav").toggle()});adjustMenu()});$(window).bind("resize orientationchange",function(){ww=document.body.clientWidth;adjustMenu()});var adjustMenu=function(){if(ww<768){$(".toggleMenu").css("display","inline-block");if(!$(".toggleMenu").hasClass("active")){$(".nav").hide()}else{$(".nav").show()}$(".nav li").unbind("mouseenter mouseleave");$(".nav li a.parent").unbind("click").bind("click",function(e){e.preventDefault();$(this).parent("li").toggleClass("hover")})}else if(ww>=768){$(".toggleMenu").css("display","none");$(".nav").show();$(".nav li").removeClass("hover");$(".nav li a").unbind("click");$(".nav li").unbind("mouseenter mouseleave").bind("mouseenter mouseleave",function(){$(this).toggleClass("hover")})}} //]]> </script> <script type='text/javascript'> //<![CDATA[ /*! Matt Tabs v2.2.1 | https://github.com/matthewhall/matt-tabs */ !function(a){"use strict";var b=function(b,c){var d=this;d.element=b,d.$element=a(b),d.tabs=d.$element.children(),d.options=a.extend({},a.fn.mtabs.defaults,c),d.current_tab=0,d.init()};b.prototype={init:function(){var a=this;a.tabs.length&&(a.build(),a.buildTabMenu())},build:function(){var b=this,c=b.options,d=c.tab_text_el,e=c.container_class;b.tab_names=[],b.$wrapper=b.$element.wrapInner('<div class="'+e+'" />').find("."+e),b.tabs.wrapAll('<div class="'+c.tabs_container_class+'" />'),b.tabs.each(function(c,e){var f,g=a(e),h=d;f=g.find(h).filter(":first").hide().text(),b.tab_names.push(f)}),a.isFunction(c.onReady)&&c.onReady.call(b.element)},buildTabMenu:function(){for(var b,c=this,d=c.options,e=d.tabsmenu_el,f=c.tab_names,g="<"+e+' class="'+d.tabsmenu_class+'">',h=0,i=f.length,j=function(){var a=arguments;return d.tmpl.tabsmenu_tab.replace(/\{[0-9]\}/g,function(b){var c=Number(b.replace(/\D/g,""));return a[c]||""})};i>h;h++)g+=j(h+1,f[h]);g+="</"+e+">",c.$tabs_menu=a(g).prependTo(c.$wrapper),b=c.$tabs_menu.find(":first")[0].nodeName.toLowerCase(),c.$tabs_menu.on("click",b,function(b){var d=a(this),e=d.index();c.show(e),b.preventDefault()}).find(":first").trigger("click")},show:function(b){var c=this,d=c.options,e=d.active_tab_class;c.tabs.hide().filter(":eq("+b+")").show(),c.$tabs_menu.children().removeClass(e).filter(":eq("+b+")").addClass(e),a.isFunction(d.onTabSelect)&&b!==c.current_tab&&d.onTabSelect.call(c.element,b),c.current_tab=b},destroy:function(){var a=this,b=a.options.tab_text_el;a.$tabs_menu.remove(),a.tabs.unwrap().unwrap(),a.tabs.removeAttr("style"),a.tabs.children(b+":first").removeAttr("style"),a.$element.removeData("mtabs")}},a.fn.mtabs=function(c,d){return this.each(function(){var e,f=a(this),g=f.data("mtabs");e="object"==typeof c&&c,g||f.data("mtabs",g=new b(this,e)),"string"==typeof c&&g[c](d)})},a.fn.mtabs.defaults={container_class:"tabs",tabs_container_class:"tabs-content",active_tab_class:"active-tab",tab_text_el:"h1, h2, h3, h4, h5, h6",tabsmenu_class:"tabs-menu",tabsmenu_el:"ul",tmpl:{tabsmenu_tab:'<li class="tab-{0}"><span>{1}</span></li>'},onTabSelect:null}}(window.jQuery,window,document); //]]> </script> <script type='text/javascript'> //<![CDATA[ /*! Related Post Widget for Blogger by kupuk blog => http://gplus.to/tovic */ var randomRelatedIndex,showRelatedPost;(function(n,m,k){var d={widgetTitle:"<h4>Artikel Terkait:</h4>",widgetStyle:1,homePage:"http://www.dte.web.id",numPosts:7,summaryLength:370,titleLength:"auto",thumbnailSize:72,noImage:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAA3NCSVQICAjb4U/gAAAADElEQVQImWOor68HAAL+AX7vOF2TAAAAAElFTkSuQmCC",containerId:"related-post",newTabLink:false,moreText:"Baca Selengkapnya",callBack:function(){}};for(var f in relatedPostConfig){d[f]=(relatedPostConfig[f]=="undefined")?d[f]:relatedPostConfig[f]}var j=function(a){var b=m.createElement("script");b.type="text/javascript";b.src=a;k.appendChild(b)},o=function(b,a){return Math.floor(Math.random()*(a-b+1))+b},l=function(a){var p=a.length,c,b;if(p===0){return false}while(--p){c=Math.floor(Math.random()*(p+1));b=a[p];a[p]=a[c];a[c]=b}return a},e=(typeof labelArray=="object"&&labelArray.length>0)?"/-/"+l(labelArray)[0]:"",h=function(b){var c=b.feed.openSearch$totalResults.$t-d.numPosts,a=o(1,(c>0?c:1));j(d.homePage.replace(/\/$/,"")+"/feeds/posts/summary"+e+"?alt=json-in-script&orderby=updated&start-index="+a+"&max-results="+d.numPosts+"&callback=showRelatedPost")},g=function(z){var s=document.getElementById(d.containerId),x=l(z.feed.entry),A=d.widgetStyle,c=d.widgetTitle+'<ul class="related-post-style-'+A+'">',b=d.newTabLink?' target="_blank"':"",y='<span style="display:block;clear:both;"></span>',v,t,w,r,u;if(!s){return}for(var q=0;q<d.numPosts;q++){if(q==x.length){break}t=x[q].title.$t;w=(d.titleLength!=="auto"&&d.titleLength<t.length)?t.substring(0,d.titleLength)+"…":t;r=("media$thumbnail" in x[q]&&d.thumbnailSize!==false)?x[q].media$thumbnail.url.replace(/\/s[0-9]+(\-c)?/,"/s"+d.thumbnailSize+"-c"):d.noImage;u=("summary" in x[q]&&d.summaryLength>0)?x[q].summary.$t.replace(/<br ?\/?>/g," ").replace(/<.*?>/g,"").replace(/[<>]/g,"").substring(0,d.summaryLength)+"…":"";for(var p=0,a=x[q].link.length;p<a;p++){v=(x[q].link[p].rel=="alternate")?x[q].link[p].href:"#"}if(A==2){c+='<li><img alt="" class="related-post-item-thumbnail" src="'+r+'" width="'+d.thumbnailSize+'" height="'+d.thumbnailSize+'"><a class="related-post-item-title" title="'+t+'" href="'+v+'"'+b+">"+w+'</a><span class="related-post-item-summary"><span class="related-post-item-summary-text">'+u+'</span> <a href="'+v+'" class="related-post-item-more"'+b+">"+d.moreText+"</a></span>"+y+"</li>"}else{if(A==3||A==4){c+='<li class="related-post-item" tabindex="0"><a class="related-post-item-title" href="'+v+'"'+b+'><img alt="" class="related-post-item-thumbnail" src="'+r+'" width="'+d.thumbnailSize+'" height="'+d.thumbnailSize+'"></a><div class="related-post-item-tooltip"><a class="related-post-item-title" title="'+t+'" href="'+v+'"'+b+">"+w+"</a></div>"+y+"</li>"}else{if(A==5){c+='<li class="related-post-item" tabindex="0"><a class="related-post-item-wrapper" href="'+v+'" title="'+t+'"'+b+'><img alt="" class="related-post-item-thumbnail" src="'+r+'" width="'+d.thumbnailSize+'" height="'+d.thumbnailSize+'"><span class="related-post-item-tooltip">'+w+"</span></a>"+y+"</li>"}else{if(A==6){c+='<li><a class="related-post-item-title" title="'+t+'" href="'+v+'"'+b+">"+w+'</a><div class="related-post-item-tooltip"><img alt="" class="related-post-item-thumbnail" src="'+r+'" width="'+d.thumbnailSize+'" height="'+d.thumbnailSize+'"><span class="related-post-item-summary"><span class="related-post-item-summary-text">'+u+"</span></span>"+y+"</div></li>"}else{c+='<li><a title="'+t+'" href="'+v+'"'+b+">"+w+"</a></li>"}}}}}s.innerHTML=c+="</ul>"+y;d.callBack()};randomRelatedIndex=h;showRelatedPost=g;j(d.homePage.replace(/\/$/,"")+"/feeds/posts/summary"+e+"?alt=json-in-script&orderby=updated&max-results=0&callback=randomRelatedIndex")})(window,document,document.getElementsByTagName("head")[0]); //]]> </script> <script type='text/javascript'> //<![CDATA[ // Youtube Responsive setTimeout(function(){$(".video-youtube").each(function(){$(this).replaceWith('<iframe class="video-youtube loader" src="'+$(this).data("src")+'" allowfullscreen="allowfullscreen" height="281" width="500"></iframe>')})},5e3); for(var imgEl=document.getElementsByTagName("img"),i=0;i<imgEl.length;i++)imgEl[i].getAttribute("src")&&(imgEl[i].setAttribute("data-src",imgEl[i].getAttribute("src")),imgEl[i].removeAttribute("src"),imgEl[i].setAttribute("src","data:image/png;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="));console.log(document.body.innerHTML); var imgDefer=document.getElementsByTagName("img");for(var i=0;i<imgDefer.length;i++){if(imgDefer[i].getAttribute("data-src")){imgDefer[i].setAttribute("src",imgDefer[i].getAttribute("data-src"))}}; var cb = function () { var l = document.createElement('link'); l.rel = 'stylesheet'; l.href ='https://www.blogger.com/static/v1/widgets/1535467126-widget_css_2_bundle.css'; var h = document.getElementsByTagName('head')[0]; h.parentNode.insertBefore(l, h); }; var raf = requestAnimationFrame || mozRequestAnimationFrame || webkitRequestAnimationFrame || msRequestAnimationFrame; if(raf) raf(cb); else window.addEventListener('load', cb); var cb = function () { var l = document.createElement('link'); l.rel = 'stylesheet'; l.href ='https://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css'; var h = document.getElementsByTagName('head')[0]; h.parentNode.insertBefore(l, h); }; var raf = requestAnimationFrame || mozRequestAnimationFrame || webkitRequestAnimationFrame || msRequestAnimationFrame; if(raf) raf(cb); else window.addEventListener('load', cb); var cb = function () { var l = document.createElement('link'); l.rel = 'stylesheet'; l.href ='https://fonts.googleapis.com/css?family=Roboto'; var h = document.getElementsByTagName('head')[0]; h.parentNode.insertBefore(l, h); }; var raf = requestAnimationFrame || mozRequestAnimationFrame || webkitRequestAnimationFrame || msRequestAnimationFrame; if(raf) raf(cb); else window.addEventListener('load', cb); //]]> </script> <script type='text/javascript'> $(function() { $(".set-1").mtabs(); }); </script> <script> $(window).scroll(function() { if($(this).scrollTop() > 200) { $('#back-to-top').fadeIn(); } else { $('#back-to-top').fadeOut(); } }); $('#back-to-top').hide().click(function() { $('html, body').animate({scrollTop:0}, 1000); return false; }); </script> <script type='text/javascript'> //<![CDATA[ $(function() { if ($('#HTML3').length) { // Ganti "#HTML3" dengan ID tertentu var el = $('#HTML3'); var stickyTop = $('#HTML3').offset().top; var stickyHeight = $('#HTML3').height(); $(window).scroll(function() { var limit = $('#bottombar').offset().top - stickyHeight - 20; // Jarak berhenti di "#footer-wrapper" var windowTop = $(window).scrollTop(); if (stickyTop < windowTop) { el.css({ position: 'fixed', top: 20 // Jarak atau margin sticky dari atas }); } else { el.css('position', 'static'); } if (limit < windowTop) { var diff = limit - windowTop; el.css({ top: diff }); } }); } }); //]]> </script> <script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/1926661341-widgets.js"></script> <script type='text/javascript'> window['__wavt'] = 'AOuZoY6V52xbP8sgvgxGxzh8gNdea0CL9Q:1729367978144';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d6909329576953681195','//androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html','6909329576953681195'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '6909329576953681195', 'title': 'Tutorial Android 2018', 'url': 'https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html', 'canonicalUrl': 'http://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html', 'homepageUrl': 'https://androidtutor2018.blogspot.com/', 'searchUrl': 'https://androidtutor2018.blogspot.com/search', 'canonicalHomepageUrl': 'http://androidtutor2018.blogspot.com/', 'blogspotFaviconUrl': 'https://androidtutor2018.blogspot.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': false, 'httpsEnabled': true, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': '', 'encoding': 'UTF-8', 'locale': 'en-GB', 'localeUnderscoreDelimited': 'en_gb', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'isDynamicViewsAvailable': true, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Tutorial Android 2018 - Atom\x22 href\x3d\x22https://androidtutor2018.blogspot.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Tutorial Android 2018 - RSS\x22 href\x3d\x22https://androidtutor2018.blogspot.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Tutorial Android 2018 - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/6909329576953681195/posts/default\x22 /\x3e\n\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Tutorial Android 2018 - Atom\x22 href\x3d\x22https://androidtutor2018.blogspot.com/feeds/1706792612850482582/comments/default\x22 /\x3e\n', 'meTag': '', 'adsenseClientId': 'ca-pub-9959096915624273', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/f220f96f12fba80a', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'Twitter', 'key': 'twitter', 'shareMessage': 'Share to Twitter', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en_GB\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'item', 'postId': '1706792612850482582', 'pageName': 'Android development guide part 2: create your own RSS reader\n-[AndroidTutor2018]', 'pageTitle': 'Tutorial Android 2018: Android development guide part 2: create your own RSS reader\n-[AndroidTutor2018]', 'metaDescription': ''}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard', 'ok': 'Ok', 'postLink': 'Post link'}}, {'name': 'template', 'data': {'name': 'custom', 'localizedName': 'Custom', 'isResponsive': false, 'isAlternateRendering': false, 'isCustom': true}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': false, 'title': 'Android development guide part 2: create your own RSS reader\n-[AndroidTutor2018]', 'description': 'AndroidTutor2018- learn more to be professional android user or developer', 'url': 'https://androidtutor2018.blogspot.com/2017/10/android-development-guide-part-2-create.html', 'type': 'item', 'isSingleItem': true, 'isMultipleItems': false, 'isError': false, 'isPage': false, 'isPost': true, 'isHomepage': false, 'isArchive': false, 'isLabelSearch': false, 'postId': 1706792612850482582}}]); _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML2', 'header-right', document.getElementById('HTML2'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML5', 'largebanner', document.getElementById('HTML5'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'lightboxEnabled': true, 'lightboxModuleUrl': 'https://www.blogger.com/static/v1/jsbin/3513641592-lbx__en_gb.js', 'lightboxCssUrl': 'https://www.blogger.com/static/v1/v-css/13464135-lightbox_bundle.css'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML4', 'recent-post-one-thumb-1', document.getElementById('HTML4'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML1', 'panel-1', document.getElementById('HTML1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogSearchView', new _WidgetInfo('BlogSearch1', 'sidebar', document.getElementById('BlogSearch1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_PopularPostsView', new _WidgetInfo('PopularPosts1', 'sidebar', document.getElementById('PopularPosts1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar', document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading\x26hellip;'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML3', 'sidebar', document.getElementById('HTML3'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'sidebar', document.getElementById('Attribution1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'sidebar', document.getElementById('Navbar1'), {}, 'displayModeFull')); </script> </body> </HTML>