Connecting to the Web: I/O Programming in Android

Connecting to the Web: I/O Programming in Android

o far all the previous articles in this Android series have been concerned with location-based services and the use of Google Maps for mapping applications. In this article, let’s turn our attention to some bread-and-butter issues?like connecting your Android application to the Web to download files.

Very often, you need to connect your Android application to the outside world, such as downloading images as well as consuming web services. This article will show you how to make your Android application communicate with the outside world using an HTTP connection. You’ll also learn how to parse XML files so that useful information can be extracted from XML documents.

Figure 1. The New Project: The new Android project is called HttpDownload.

Creating the Project
Using Eclipse, create a new Android project and name it HttpDownload, as shown in Figure 1.

In the HttpDownload.java file, first import the various namespaces that you will need for this project (see Listing 1).

As you’ll be accessing the Internet, you’ll need to add the relevant permissions to your AndroidManifest.xml file:

                                                                                    

Let’s define a helper function called OpenHttpConnection() that opens a connection to a HTTP server and returns an InputStream object (Listing 2).

To open a connection to a server, you first create an instance of the URL class and initialize it with the URL of the server. When the connection is established, you pass this connection to an URLConnection object. You then verify whether the protocol is indeed HTTP; if not you will throw an IOException. The URLConnection object is then cast into an HttpURLConnection object and you set the various properties of the HTTP connection. Next, you connect to the HTTP server and get a response from the server. If the response code is HTTP_OK, you then get the InputStream object from the connection so that you can begin to read incoming data from the server. The function then returns the InputStream object obtained.

In the main.xml file, insert the and elements. These will allow you to visually display the downloaded images and text (Listing 3).

Downloading Images
The first thing you want to do is to download some images stored on a web server. To do this, define the DownloadImage() function as follows:

    private Bitmap DownloadImage(String URL)    {                Bitmap bitmap = null;        InputStream in = null;                try {            in = OpenHttpConnection(URL);            bitmap = BitmapFactory.decodeStream(in);            in.close();        } catch (IOException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        return bitmap;                    }

The DownloadImage() function takes in a string containing the URL of the image to download. It then calls the OpenHttpConnection() function to obtain an InputStream object for reading the image data. The InputStream object is sent to the decodeStream() method of the BitmapFactory class. The decodeStream() method decodes an InputStream object into a bitmap. The decoded bitmap is then returned by the DownloadImage() function.

To test the DownloadImage() function, modify the onCreate() event as follows:

@Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                Bitmap bitmap =             DownloadImage(            "http://www.streetcar.org/mim/cable/images/cable-01.jpg");        img = (ImageView) findViewById(R.id.img);        img.setImageBitmap(bitmap);    }

Press F11 in Eclipse to test the application on the Android emulator. Figure 2 shows the image downloaded and displayed in the ImageView view.


Figure 2. The Downloaded Image: The image is downloaded and displayed in the ImageView view.
 
Figure 3. The Downloaded File: The text file is downloaded and displayed in a TextView view.

Downloading Text
Now, let’s try to download text files from the web and display them using the TextView view. First, define the DownloadText() function as shown in Listing 4.

As usual, you call the OpenHttpConnnection() function to obtain an InputStream object. The InputStream object is then used by the InputStreamReader class so that characters can be read from the stream. The characters are read into a char array and then copied into a string variable. The string variable is then returned.

To test the DownloadText() function, modify the onCreate() event as follows:

    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                /*        Bitmap bitmap =             DownloadImage(            "http://www.streetcar.org/mim/cable/images/cable-01.jpg");        img = (ImageView) findViewById(R.id.img);        img.setImageBitmap(bitmap);        */        String str =            DownloadText("http://www.appleinsider.com/appleinsider.rss");        txt = (TextView) findViewById(R.id.text);        txt.setText(str);            }   

Press F11 in Eclipse to test the application on the Android emulator. Figure 3 shows the file downloaded and displayed in the TextView view.

Downloading RSS Feeds
Very often, you need to download XML files and parse the contents (a good example of this is consuming web services). And so in this section, you will learn how to download a RSS feed and then extract the relevant parts (such as the </span> element) and display its content.</p> <table border="0" cellspacing="0" cellpadding="5" align="RIGHT" width="239"> <tr> <td valign="top"><a href="javascript:showSupportItem('figure4')"><img decoding="async" loading="lazy" border="0" alt="" src="http://assets.devx.com/articlefigs/39810_4.jpg" width="150" height="150"></a></td> <td width="12"> </td> </tr> <tr> <td class="smallfont"><a href="javascript:showSupportItem('figure4')"><strong>Figure 4.</a> An Example:</strong> The “<em><item>/<title>“</em> element contains the title of each posting.</td> </tr> </table> <p>Define the <span class="pf">DownloadRSS()</span> function as shown in <a href="javascript:showSupportItem('listing5')">Listing 5</a>. </p> <p>First, call the <span class="pf">OpenHttpConnnection()</span> function to obtain an <span class="pf">InputStream</span> object. To process XML documents, use the following classes:</p> <ul> <li> <em>Document</em>: This represents an XML document.</li> <li> <em>DocumentBuilder</em>: This converts a XML source (such as files, streams, and so on) into a Document.</li> <li> <em>DocumentBuilderFactory</em>: This provides a factory for <span class="pf">DocumentBuilder</span> instances.</li> </ul> <p>Essentially, the <span class="pf">InputStream</span> object is used to read the XML data and then parsed into a <span class="pf">Document</span> object. </p> <p>After the XML document is loaded into a <span class="pf">Document</span> object, you locate the relevant elements to extract. In particular, for an RSS document, the “<span class="pf"><item>/<title>“</span> element contains the title of each posting (see <a href="javascript:showSupportItem('figure4')">Figure 4</a>).</p> <table border="0" cellspacing="0" cellpadding="5" align="RIGHT" width="239"> <tr> <td valign="top"><a href="javascript:showSupportItem('figure5')"><img decoding="async" loading="lazy" border="0" alt="" src="http://assets.devx.com/articlefigs/39810_5.jpg" width="150" height="150"></a></td> <td width="12"> </td> </tr> <tr> <td class="smallfont"><a href="javascript:showSupportItem('figure5')"><strong>Figure 5.</a> The RSS Feed:</strong> Displaying all the titles of the postings in a RSS feed using the Toast class.</td> </tr> </table> <p>Once the title of each posting is retrieved, it is displayed using the Toast class. To test the DownloadRSS() function, modify the onCreate() event as shown in <a href="javascript:showSupportItem('listing6')">Listing 6</a>. </p> <p>Press F11 in Eclipse to test the application on the Android emulator. <a href="javascript:showSupportItem('figure5')">Figure 5</a> shows the titles of all the postings contained within the RSS feed displayed by the Toast class. </p> <p>That’s it! If you have interesting ideas involving things you can do with HTTP downloads, send me an email.</p> <p> </div> </div> <div class="elementor-element elementor-element-4f9883d elementor-widget elementor-widget-post-navigation" data-id="4f9883d" data-element_type="widget" data-widget_type="post-navigation.default"> <div class="elementor-widget-container"> <div class="elementor-post-navigation"> <div class="elementor-post-navigation__prev elementor-post-navigation__link"> <a href="https://www.devx.com/dotnet-zone/39793/" rel="prev"><span class="elementor-post-navigation__link__prev"><span class="post-navigation__prev--label">Previous</span></span></a> </div> <div class="elementor-post-navigation__next elementor-post-navigation__link"> <a href="https://www.devx.com/semantic-web-zone/39794/" rel="next"><span class="elementor-post-navigation__link__next"><span class="post-navigation__next--label">Next</span></span></a> </div> </div> </div> </div> <div class="elementor-element elementor-element-2bf5b4bc elementor-widget elementor-widget-heading" data-id="2bf5b4bc" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <span class="elementor-heading-title elementor-size-default">Share the Post:</span> </div> </div> <div class="elementor-element elementor-element-496b8f65 elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--color-custom elementor-share-buttons--shape-square elementor-grid-0 elementor-widget elementor-widget-share-buttons" data-id="496b8f65" data-element_type="widget" data-widget_type="share-buttons.default"> <div class="elementor-widget-container"> <link rel="stylesheet" href="https://www.devx.com/wp-content/plugins/elementor-pro/assets/css/widget-share-buttons.min.css"> <div class="elementor-grid"> <div class="elementor-grid-item"> <div class="elementor-share-btn elementor-share-btn_facebook" role="button" tabindex="0" aria-label="Share on facebook" > <span class="elementor-share-btn__icon"> <i class="fab fa-facebook" aria-hidden="true"></i> </span> </div> </div> <div class="elementor-grid-item"> <div class="elementor-share-btn elementor-share-btn_twitter" role="button" tabindex="0" aria-label="Share on twitter" > <span class="elementor-share-btn__icon"> <i class="fab fa-twitter" aria-hidden="true"></i> </span> </div> </div> <div class="elementor-grid-item"> <div class="elementor-share-btn elementor-share-btn_linkedin" role="button" tabindex="0" aria-label="Share on linkedin" > <span class="elementor-share-btn__icon"> <i class="fab fa-linkedin" aria-hidden="true"></i> </span> </div> </div> </div> </div> </div> <div class="elementor-element elementor-element-39bd7056 elementor-grid-1 elementor-posts--thumbnail-right elementor-grid-tablet-2 elementor-grid-mobile-1 load-more-align-center elementor-widget elementor-widget-posts" data-id="39bd7056" data-element_type="widget" data-settings="{"classic_columns":"1","classic_row_gap":{"unit":"px","size":0,"sizes":[]},"pagination_type":"load_more_on_click","classic_columns_tablet":"2","classic_columns_mobile":"1","classic_row_gap_tablet":{"unit":"px","size":"","sizes":[]},"classic_row_gap_mobile":{"unit":"px","size":"","sizes":[]},"load_more_spinner":{"value":"fas fa-spinner","library":"fa-solid"}}" data-widget_type="posts.classic"> <div class="elementor-widget-container"> <link rel="stylesheet" href="https://www.devx.com/wp-content/plugins/elementor-pro/assets/css/widget-posts.min.css"> <div class="elementor-posts-container elementor-posts elementor-posts--skin-classic elementor-grid"> <article class="elementor-post elementor-grid-item post-26053 post type-post status-publish format-standard has-post-thumbnail hentry category-data-access"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/data-access/the-role-of-call-data-how-call-tracking-can-improve-customer-experience/" > <div class="elementor-post__thumbnail"><img width="512" height="401" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26055 ewww_webp" alt="software for call tracking" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/software-for-call-tracking.png" data-src-webp="https://www.devx.com/wp-content/uploads/software-for-call-tracking.png.webp" data-eio="j" /><noscript><img width="512" height="401" src="https://www.devx.com/wp-content/uploads/software-for-call-tracking.png" class="elementor-animation-grow attachment-full size-full wp-image-26055" alt="software for call tracking" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/data-access/the-role-of-call-data-how-call-tracking-can-improve-customer-experience/" > The Role of Call Data: How Call Tracking Can Improve Customer Experience </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> June 9, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>Who would argue that experiences reign supreme? But not just any experiences — the ones that occur when customers interact with your business. It’s these real-life interactions that have the</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-25408 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized category-tip-bank tag-data tag-data-observability"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/uncategorized/data-observability-explained/" > <div class="elementor-post__thumbnail"><img width="451" height="296" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26051 ewww_webp" alt="data observability" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/Screenshot-2023-06-08-at-1.40.02-PM.png" data-src-webp="https://www.devx.com/wp-content/uploads/Screenshot-2023-06-08-at-1.40.02-PM.png.webp" data-eio="j" /><noscript><img width="451" height="296" src="https://www.devx.com/wp-content/uploads/Screenshot-2023-06-08-at-1.40.02-PM.png" class="elementor-animation-grow attachment-full size-full wp-image-26051" alt="data observability" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/uncategorized/data-observability-explained/" > Data Observability Explained </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> June 8, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>Data is the lifeblood of any successful business, as it is the driving force behind critical decision-making, insight generation, and strategic development. However, due to its intricate nature, ensuring the</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-25423 post type-post status-publish format-standard has-post-thumbnail hentry category-devx-daily-news category-uncategorized tag-gaming tag-software"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/uncategorized/logitech-g502-software-optimize-and-customize-your-gear/" > <div class="elementor-post__thumbnail"><img width="448" height="299" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26048 ewww_webp" alt="logitech g502 software" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/Screenshot-2023-06-08-at-1.34.49-PM.png" data-src-webp="https://www.devx.com/wp-content/uploads/Screenshot-2023-06-08-at-1.34.49-PM.png.webp" data-eio="j" /><noscript><img width="448" height="299" src="https://www.devx.com/wp-content/uploads/Screenshot-2023-06-08-at-1.34.49-PM.png" class="elementor-animation-grow attachment-full size-full wp-image-26048" alt="logitech g502 software" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/uncategorized/logitech-g502-software-optimize-and-customize-your-gear/" > Logitech G502 Software: Optimize and Customize Your Gear </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> June 8, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>One of the most significant surges of the 21st century is gaming. Gaming is more popular than ever before thanks to innovative new consoles, high-tech PC setups, mobile gaming improvements,</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-25945 post type-post status-publish format-standard has-post-thumbnail hentry category-data-access"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/data-access/different-types-of-data-models-explained-with-examples/" > <div class="elementor-post__thumbnail"><img width="1707" height="2560" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26045 ewww_webp" alt="data modeling" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/data-modeling-1-scaled.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/data-modeling-1-scaled.jpg.webp" data-eio="j" /><noscript><img width="1707" height="2560" src="https://www.devx.com/wp-content/uploads/data-modeling-1-scaled.jpg" class="elementor-animation-grow attachment-full size-full wp-image-26045" alt="data modeling" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/data-access/different-types-of-data-models-explained-with-examples/" > Different Types of Data Models Explained with Examples </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> June 7, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>In the modern world, data is everything and everywhere. With so much access to technology, data has become a valuable resource for any business. Albeit a complex one. Data is</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-25986 post type-post status-publish format-standard has-post-thumbnail hentry category-artificial-intelligence-ai category-uncategorized"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/artificial-intelligence-ai/revolutionizing-search-a-glimpse-into-googles-generative-experience/" > <div class="elementor-post__thumbnail"><img width="1920" height="1188" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26039 ewww_webp" alt="google search" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/google-search.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/google-search.jpg.webp" data-eio="j" /><noscript><img width="1920" height="1188" src="https://www.devx.com/wp-content/uploads/google-search.jpg" class="elementor-animation-grow attachment-full size-full wp-image-26039" alt="google search" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/artificial-intelligence-ai/revolutionizing-search-a-glimpse-into-googles-generative-experience/" > Revolutionizing Search: A Glimpse Into Google’s Generative Experience </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> June 6, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>Google is revolutionizing the search experience as we know it with its latest generative experience. No longer will you be bound by the limitations of traditional keyword searching. Now, you</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-26022 post type-post status-publish format-standard has-post-thumbnail hentry category-office-productivity"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/office-productivity/10-productivity-hacks-to-supercharge-your-business-in-2023/" > <div class="elementor-post__thumbnail"><img width="1920" height="1282" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26037 ewww_webp" alt="productivity hack" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/productivity-hack.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/productivity-hack.jpg.webp" data-eio="j" /><noscript><img width="1920" height="1282" src="https://www.devx.com/wp-content/uploads/productivity-hack.jpg" class="elementor-animation-grow attachment-full size-full wp-image-26037" alt="productivity hack" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/office-productivity/10-productivity-hacks-to-supercharge-your-business-in-2023/" > 10 Productivity Hacks to Supercharge Your Business in 2023 </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> June 5, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>Picture this: your team working seamlessly, completing tasks efficiently, and achieving goals with ease. Sounds like too good to be true? Not at all! With our productivity hacks, you can</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-25988 post type-post status-publish format-standard has-post-thumbnail hentry category-devx-daily-news category-uncategorized tag-gm tag-uprotocol"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/uncategorized/gm-creates-open-source-uprotocol-and-invites-automakers-to-adopt-it-revolutionizing-automotive-software-development/" > <div class="elementor-post__thumbnail"><img width="381" height="286" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26032 ewww_webp" alt="GM Creates Open Source uProtocol and Invites Automakers to Adopt It: Revolutionizing Automotive Software Development." loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/Screenshot-2023-06-02-at-11.30.24-AM.png" data-src-webp="https://www.devx.com/wp-content/uploads/Screenshot-2023-06-02-at-11.30.24-AM.png.webp" data-eio="j" /><noscript><img width="381" height="286" src="https://www.devx.com/wp-content/uploads/Screenshot-2023-06-02-at-11.30.24-AM.png" class="elementor-animation-grow attachment-full size-full wp-image-26032" alt="GM Creates Open Source uProtocol and Invites Automakers to Adopt It: Revolutionizing Automotive Software Development." loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/uncategorized/gm-creates-open-source-uprotocol-and-invites-automakers-to-adopt-it-revolutionizing-automotive-software-development/" > GM Creates Open Source uProtocol and Invites Automakers to Adopt It: Revolutionizing Automotive Software Development. </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> June 2, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>General Motors (GM) recently announced its entry into the Eclipse Foundation. The Eclipse Foundation is a prominent open-source software foundation. In addition, GMC announced its contribution of “uProtocol” to facilitate</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-26024 post type-post status-publish format-standard has-post-thumbnail hentry category-data-access category-data-access-and-management category-devx category-tech-trends tag-ai tag-data-management tag-security tag-technology"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/data-access/what-is-metadata/" > <div class="elementor-post__thumbnail"><img width="1920" height="1280" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26026 ewww_webp" alt="Heading photo, Metadata." loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/pexels-markus-spiske-2004161.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/pexels-markus-spiske-2004161.jpg.webp" data-eio="j" /><noscript><img width="1920" height="1280" src="https://www.devx.com/wp-content/uploads/pexels-markus-spiske-2004161.jpg" class="elementor-animation-grow attachment-full size-full wp-image-26026" alt="Heading photo, Metadata." loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/data-access/what-is-metadata/" > What is Metadata? </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> June 1, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>What is metadata? Well, It’s an odd concept to wrap your head around. Metadata is essentially the secondary layer of data that tracks details about the “regular” data. The regular</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-26016 post type-post status-publish format-standard has-post-thumbnail hentry category-data-access-and-management"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/data-access-and-management/what-we-should-expect-from-cell-phone-tech-in-the-near-future/" > <div class="elementor-post__thumbnail"><img width="1707" height="2560" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26017 ewww_webp" alt="cell phones" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/pexels-rdne-stock-project-4921398-scaled.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/pexels-rdne-stock-project-4921398-scaled.jpg.webp" data-eio="j" /><noscript><img width="1707" height="2560" src="https://www.devx.com/wp-content/uploads/pexels-rdne-stock-project-4921398-scaled.jpg" class="elementor-animation-grow attachment-full size-full wp-image-26017" alt="cell phones" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/data-access-and-management/what-we-should-expect-from-cell-phone-tech-in-the-near-future/" > What We Should Expect from Cell Phone Tech in the Near Future </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> May 31, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>The earliest cell phones included boxy designs full of buttons and antennas, and they only made calls. Needless to say, we’ve come a long way from those classic brick phones</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-25678 post type-post status-publish format-standard has-post-thumbnail hentry category-tech-trends category-technology tag-keyboards tag-mechanical-keyboards"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/tech-trends/the-best-mechanical-keyboards-for-programmers-where-to-find-them/" > <div class="elementor-post__thumbnail"><img width="1920" height="1280" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-25998 ewww_webp" alt="Where to find the Best Mechanical Keyboards for Programmers" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/pexels-karol-d-841228.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/pexels-karol-d-841228.jpg.webp" data-eio="j" /><noscript><img width="1920" height="1280" src="https://www.devx.com/wp-content/uploads/pexels-karol-d-841228.jpg" class="elementor-animation-grow attachment-full size-full wp-image-25998" alt="Where to find the Best Mechanical Keyboards for Programmers" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/tech-trends/the-best-mechanical-keyboards-for-programmers-where-to-find-them/" > The Best Mechanical Keyboards For Programmers: Where To Find Them </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> May 29, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>When it comes to programming, a good mechanical keyboard can make all the difference. Naturally, you would want one of the best mechanical keyboards for programmers. But with so many</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-26000 post type-post status-publish format-standard has-post-thumbnail hentry category-devx-daily-news tag-big-brother"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/devx-daily-news/the-digital-panopticon-is-big-brother-always-watching-us-online/" > <div class="elementor-post__thumbnail"><img width="1920" height="1280" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-26001 ewww_webp" alt="The Digital Panopticon: Is Big Brother Always Watching Us Online?" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/marvin-meyer-SYTO3xs06fU-unsplash-1.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/marvin-meyer-SYTO3xs06fU-unsplash-1.jpg.webp" data-eio="j" /><noscript><img width="1920" height="1280" src="https://www.devx.com/wp-content/uploads/marvin-meyer-SYTO3xs06fU-unsplash-1.jpg" class="elementor-animation-grow attachment-full size-full wp-image-26001" alt="The Digital Panopticon: Is Big Brother Always Watching Us Online?" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/devx-daily-news/the-digital-panopticon-is-big-brother-always-watching-us-online/" > The Digital Panopticon: Is Big Brother Always Watching Us Online? </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> May 26, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>In the age of digital transformation, the internet has become a ubiquitous part of our lives. From socializing, shopping, and learning to more sensitive activities such as banking and healthcare,</p> </div> </div> </article> <article class="elementor-post elementor-grid-item post-25983 post type-post status-publish format-standard has-post-thumbnail hentry category-artificial-intelligence-ai"> <a class="elementor-post__thumbnail__link" href="https://www.devx.com/artificial-intelligence-ai/embracing-change-how-ai-is-revolutionizing-the-developers-role/" > <div class="elementor-post__thumbnail"><img width="1920" height="1440" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" class="elementor-animation-grow attachment-full size-full wp-image-25984 ewww_webp" alt="web developer" loading="lazy" data-src-img="https://www.devx.com/wp-content/uploads/web-developer.jpg" data-src-webp="https://www.devx.com/wp-content/uploads/web-developer.jpg.webp" data-eio="j" /><noscript><img width="1920" height="1440" src="https://www.devx.com/wp-content/uploads/web-developer.jpg" class="elementor-animation-grow attachment-full size-full wp-image-25984" alt="web developer" loading="lazy" /></noscript></div> </a> <div class="elementor-post__text"> <h3 class="elementor-post__title"> <a href="https://www.devx.com/artificial-intelligence-ai/embracing-change-how-ai-is-revolutionizing-the-developers-role/" > Embracing Change: How AI Is Revolutionizing the Developer’s Role </a> </h3> <div class="elementor-post__meta-data"> <span class="elementor-post-date"> May 25, 2023 </span> </div> <div class="elementor-post__excerpt"> <p>The world of software development is changing drastically with the introduction of Artificial Intelligence and Machine Learning technologies. In the past, software developers were in charge of the entire development</p> </div> </div> </article> </div> <span class="e-load-more-spinner"> <i aria-hidden="true" class="fas fa-spinner"></i> </span> <div class="e-load-more-anchor" data-page="1" data-max-page="1499" data-next-page="https://www.devx.com/wireless-zone/39810/2/"></div> <div class="elementor-button-wrapper"> <a href="#" class="elementor-button-link elementor-button elementor-animation-grow" role="button"> <span class="elementor-button-content-wrapper"> <span class="elementor-button-text">Show More</span> </span> </a> </div> <div class="e-load-more-message"></div> </div> </div> </div> </div> </div> </section> </div> </div> <div class="elementor-column elementor-col-20 elementor-top-column elementor-element elementor-element-270dc71" data-id="270dc71" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-20 elementor-top-column elementor-element elementor-element-8905b95 elementor-hidden-tablet" data-id="8905b95" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-46d69df elementor-widget elementor-widget-html" data-id="46d69df" data-element_type="widget" data-widget_type="html.default"> <div class="elementor-widget-container"> <iframe id="JotFormIFrame-230167013128041" title="Daily Technology News Straight to Your Inbox" onload="window.parent.scrollTo(0,0)" allowtransparency="true" allowfullscreen="true" allow="geolocation; microphone; camera" src="https://form.jotform.com/230167013128041" frameborder="0" style=" min-width: 100%; height:539px; border:none;" scrolling="no" > </iframe> <script type="text/javascript"> var ifr = document.getElementById("JotFormIFrame-230167013128041"); if (ifr) { var src = ifr.src; var iframeParams = []; if (window.location.href && window.location.href.indexOf("?") > -1) { iframeParams = iframeParams.concat(window.location.href.substr(window.location.href.indexOf("?") + 1).split('&')); } if (src && src.indexOf("?") > -1) { iframeParams = iframeParams.concat(src.substr(src.indexOf("?") + 1).split("&")); src = src.substr(0, src.indexOf("?")) } iframeParams.push("isIframeEmbed=1"); ifr.src = src + "?" + iframeParams.join('&'); } window.handleIFrameMessage = function(e) { if (typeof e.data === 'object') { return; } var args = e.data.split(":"); if (args.length > 2) { iframe = document.getElementById("JotFormIFrame-" + args[(args.length - 1)]); } else { iframe = document.getElementById("JotFormIFrame"); } if (!iframe) { return; } switch (args[0]) { case "scrollIntoView": iframe.scrollIntoView(); break; case "setHeight": iframe.style.height = args[1] + "px"; if (!isNaN(args[1]) && parseInt(iframe.style.minHeight) > parseInt(args[1])) { iframe.style.minHeight = args[1] + "px"; } break; case "collapseErrorPage": if (iframe.clientHeight > window.innerHeight) { iframe.style.height = window.innerHeight + "px"; } break; case "reloadPage": window.location.reload(); break; case "loadScript": if( !window.isPermitted(e.origin, ['jotform.com', 'jotform.pro']) ) { break; } var src = args[1]; if (args.length > 3) { src = args[1] + ':' + args[2]; } var script = document.createElement('script'); script.src = src; script.type = 'text/javascript'; document.body.appendChild(script); break; case "exitFullscreen": if (window.document.exitFullscreen) window.document.exitFullscreen(); else if (window.document.mozCancelFullScreen) window.document.mozCancelFullScreen(); else if (window.document.mozCancelFullscreen) window.document.mozCancelFullScreen(); else if (window.document.webkitExitFullscreen) window.document.webkitExitFullscreen(); else if (window.document.msExitFullscreen) window.document.msExitFullscreen(); break; } var isJotForm = (e.origin.indexOf("jotform") > -1) ? true : false; if(isJotForm && "contentWindow" in iframe && "postMessage" in iframe.contentWindow) { var urls = {"docurl":encodeURIComponent(document.URL),"referrer":encodeURIComponent(document.referrer)}; iframe.contentWindow.postMessage(JSON.stringify({"type":"urls","value":urls}), "*"); } }; window.isPermitted = function(originUrl, whitelisted_domains) { var url = document.createElement('a'); url.href = originUrl; var hostname = url.hostname; var result = false; if( typeof hostname !== 'undefined' ) { whitelisted_domains.forEach(function(element) { if( hostname.slice((-1 * element.length - 1)) === '.'.concat(element) || hostname === element ) { result = true; } }); return result; } }; if (window.addEventListener) { window.addEventListener("message", handleIFrameMessage, false); } else if (window.attachEvent) { window.attachEvent("onmessage", handleIFrameMessage); } </script> </div> </div> <div class="elementor-element elementor-element-7c9513d elementor-widget elementor-widget-html" data-id="7c9513d" data-element_type="widget" data-settings="{"sticky_offset":10,"sticky_parent":"yes","sticky":"top","sticky_on":["desktop","tablet","mobile"],"sticky_effects_offset":0}" data-widget_type="html.default"> <div class="elementor-widget-container"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1183579825777021" crossorigin="anonymous"></script> <!-- devx top --> <ins class="adsbygoogle" style="display:inline-block;width:300px;height:600px" data-ad-client="ca-pub-1183579825777021" data-ad-slot="2250810506"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> </div> </div> </section> <section class="elementor-section elementor-top-section elementor-element elementor-element-7ef94119 elementor-hidden-mobile elementor-hidden-tablet elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="7ef94119" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-cb0d3b5" data-id="cb0d3b5" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-dcd3813" data-id="dcd3813" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> </div> </section> </div> <footer data-elementor-type="footer" data-elementor-id="23300" class="elementor elementor-23300 elementor-location-footer"> <footer class="elementor-section elementor-top-section elementor-element elementor-element-1588a538 elementor-section-height-min-height elementor-section-content-middle elementor-section-full_width elementor-section-height-default elementor-section-items-middle" data-id="1588a538" data-element_type="section" data-settings="{"background_background":"classic"}"> <div class="elementor-container elementor-column-gap-no"> <div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-9d2a788" data-id="9d2a788" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-2e0ce949" data-id="2e0ce949" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-4f9ec08 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="4f9ec08" data-element_type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <style>/*! elementor - v3.12.2 - 23-04-2023 */ .elementor-widget-divider{--divider-border-style:none;--divider-border-width:1px;--divider-color:#0c0d0e;--divider-icon-size:20px;--divider-element-spacing:10px;--divider-pattern-height:24px;--divider-pattern-size:20px;--divider-pattern-url:none;--divider-pattern-repeat:repeat-x}.elementor-widget-divider .elementor-divider{display:flex}.elementor-widget-divider .elementor-divider__text{font-size:15px;line-height:1;max-width:95%}.elementor-widget-divider .elementor-divider__element{margin:0 var(--divider-element-spacing);flex-shrink:0}.elementor-widget-divider .elementor-icon{font-size:var(--divider-icon-size)}.elementor-widget-divider .elementor-divider-separator{display:flex;margin:0;direction:ltr}.elementor-widget-divider--view-line_icon .elementor-divider-separator,.elementor-widget-divider--view-line_text .elementor-divider-separator{align-items:center}.elementor-widget-divider--view-line_icon .elementor-divider-separator:after,.elementor-widget-divider--view-line_icon .elementor-divider-separator:before,.elementor-widget-divider--view-line_text .elementor-divider-separator:after,.elementor-widget-divider--view-line_text .elementor-divider-separator:before{display:block;content:"";border-bottom:0;flex-grow:1;border-top:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--element-align-left .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-left .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-left .elementor-divider__element{margin-left:0}.elementor-widget-divider--element-align-right .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-right .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-right .elementor-divider__element{margin-right:0}.elementor-widget-divider:not(.elementor-widget-divider--view-line_text):not(.elementor-widget-divider--view-line_icon) .elementor-divider-separator{border-top:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--separator-type-pattern{--divider-border-style:none}.elementor-widget-divider--separator-type-pattern.elementor-widget-divider--view-line .elementor-divider-separator,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:after,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:before,.elementor-widget-divider--separator-type-pattern:not([class*=elementor-widget-divider--view]) .elementor-divider-separator{width:100%;min-height:var(--divider-pattern-height);-webkit-mask-size:var(--divider-pattern-size) 100%;mask-size:var(--divider-pattern-size) 100%;-webkit-mask-repeat:var(--divider-pattern-repeat);mask-repeat:var(--divider-pattern-repeat);background-color:var(--divider-color);-webkit-mask-image:var(--divider-pattern-url);mask-image:var(--divider-pattern-url)}.elementor-widget-divider--no-spacing{--divider-pattern-size:auto}.elementor-widget-divider--bg-round{--divider-pattern-repeat:round}.rtl .elementor-widget-divider .elementor-divider__text{direction:rtl}.e-con-inner>.elementor-widget-divider,.e-con>.elementor-widget-divider{width:var(--container-widget-width,100%);--flex-grow:var(--container-widget-flex-grow)}</style> <div class="elementor-divider"> <span class="elementor-divider-separator"> </span> </div> </div> </div> <section class="elementor-section elementor-inner-section elementor-element elementor-element-73a9986 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="73a9986" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-7f08930" data-id="7f08930" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-269b367 elementor-nav-menu__align-center elementor-nav-menu--dropdown-tablet elementor-nav-menu__text-align-aside elementor-nav-menu--toggle elementor-nav-menu--burger elementor-widget elementor-widget-nav-menu" data-id="269b367" data-element_type="widget" data-settings="{"layout":"horizontal","submenu_icon":{"value":"<i class=\"fas fa-caret-down\"><\/i>","library":"fa-solid"},"toggle":"burger"}" data-widget_type="nav-menu.default"> <div class="elementor-widget-container"> <nav class="elementor-nav-menu--main elementor-nav-menu__container elementor-nav-menu--layout-horizontal e--pointer-underline e--animation-fade"> <ul id="menu-1-269b367" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-23808"><a href="https://www.devx.com/" class="elementor-item">Home</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23809"><a href="https://www.devx.com/advertise/" class="elementor-item">Advertise</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23816"><a href="https://www.devx.com/about/" class="elementor-item">About</a></li> </ul> </nav> <div class="elementor-menu-toggle" role="button" tabindex="0" aria-label="Menu Toggle" aria-expanded="false"> <i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--open eicon-menu-bar"></i><i aria-hidden="true" role="presentation" class="elementor-menu-toggle__icon--close eicon-close"></i> <span class="elementor-screen-only">Menu</span> </div> <nav class="elementor-nav-menu--dropdown elementor-nav-menu__container" aria-hidden="true"> <ul id="menu-2-269b367" class="elementor-nav-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-23808"><a href="https://www.devx.com/" class="elementor-item" tabindex="-1">Home</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23809"><a href="https://www.devx.com/advertise/" class="elementor-item" tabindex="-1">Advertise</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-23816"><a href="https://www.devx.com/about/" class="elementor-item" tabindex="-1">About</a></li> </ul> </nav> </div> </div> </div> </div> <div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-21928d3" data-id="21928d3" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-869862d" data-id="869862d" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-5d5f4dc5 e-grid-align-left elementor-shape-rounded elementor-grid-0 elementor-widget elementor-widget-social-icons" data-id="5d5f4dc5" data-element_type="widget" data-widget_type="social-icons.default"> <div class="elementor-widget-container"> <style>/*! elementor - v3.12.2 - 23-04-2023 */ .elementor-widget-social-icons.elementor-grid-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-mobile-0 .elementor-widget-container,.elementor-widget-social-icons.elementor-grid-tablet-0 .elementor-widget-container{line-height:1;font-size:0}.elementor-widget-social-icons:not(.elementor-grid-0):not(.elementor-grid-tablet-0):not(.elementor-grid-mobile-0) .elementor-grid{display:inline-grid}.elementor-widget-social-icons .elementor-grid{grid-column-gap:var(--grid-column-gap,5px);grid-row-gap:var(--grid-row-gap,5px);grid-template-columns:var(--grid-template-columns);justify-content:var(--justify-content,center);justify-items:var(--justify-content,center)}.elementor-icon.elementor-social-icon{font-size:var(--icon-size,25px);line-height:var(--icon-size,25px);width:calc(var(--icon-size, 25px) + (2 * var(--icon-padding, .5em)));height:calc(var(--icon-size, 25px) + (2 * var(--icon-padding, .5em)))}.elementor-social-icon{--e-social-icon-icon-color:#fff;display:inline-flex;background-color:#69727d;align-items:center;justify-content:center;text-align:center;cursor:pointer}.elementor-social-icon i{color:var(--e-social-icon-icon-color)}.elementor-social-icon svg{fill:var(--e-social-icon-icon-color)}.elementor-social-icon:last-child{margin:0}.elementor-social-icon:hover{opacity:.9;color:#fff}.elementor-social-icon-android{background-color:#a4c639}.elementor-social-icon-apple{background-color:#999}.elementor-social-icon-behance{background-color:#1769ff}.elementor-social-icon-bitbucket{background-color:#205081}.elementor-social-icon-codepen{background-color:#000}.elementor-social-icon-delicious{background-color:#39f}.elementor-social-icon-deviantart{background-color:#05cc47}.elementor-social-icon-digg{background-color:#005be2}.elementor-social-icon-dribbble{background-color:#ea4c89}.elementor-social-icon-elementor{background-color:#d30c5c}.elementor-social-icon-envelope{background-color:#ea4335}.elementor-social-icon-facebook,.elementor-social-icon-facebook-f{background-color:#3b5998}.elementor-social-icon-flickr{background-color:#0063dc}.elementor-social-icon-foursquare{background-color:#2d5be3}.elementor-social-icon-free-code-camp,.elementor-social-icon-freecodecamp{background-color:#006400}.elementor-social-icon-github{background-color:#333}.elementor-social-icon-gitlab{background-color:#e24329}.elementor-social-icon-globe{background-color:#69727d}.elementor-social-icon-google-plus,.elementor-social-icon-google-plus-g{background-color:#dd4b39}.elementor-social-icon-houzz{background-color:#7ac142}.elementor-social-icon-instagram{background-color:#262626}.elementor-social-icon-jsfiddle{background-color:#487aa2}.elementor-social-icon-link{background-color:#818a91}.elementor-social-icon-linkedin,.elementor-social-icon-linkedin-in{background-color:#0077b5}.elementor-social-icon-medium{background-color:#00ab6b}.elementor-social-icon-meetup{background-color:#ec1c40}.elementor-social-icon-mixcloud{background-color:#273a4b}.elementor-social-icon-odnoklassniki{background-color:#f4731c}.elementor-social-icon-pinterest{background-color:#bd081c}.elementor-social-icon-product-hunt{background-color:#da552f}.elementor-social-icon-reddit{background-color:#ff4500}.elementor-social-icon-rss{background-color:#f26522}.elementor-social-icon-shopping-cart{background-color:#4caf50}.elementor-social-icon-skype{background-color:#00aff0}.elementor-social-icon-slideshare{background-color:#0077b5}.elementor-social-icon-snapchat{background-color:#fffc00}.elementor-social-icon-soundcloud{background-color:#f80}.elementor-social-icon-spotify{background-color:#2ebd59}.elementor-social-icon-stack-overflow{background-color:#fe7a15}.elementor-social-icon-steam{background-color:#00adee}.elementor-social-icon-stumbleupon{background-color:#eb4924}.elementor-social-icon-telegram{background-color:#2ca5e0}.elementor-social-icon-thumb-tack{background-color:#1aa1d8}.elementor-social-icon-tripadvisor{background-color:#589442}.elementor-social-icon-tumblr{background-color:#35465c}.elementor-social-icon-twitch{background-color:#6441a5}.elementor-social-icon-twitter{background-color:#1da1f2}.elementor-social-icon-viber{background-color:#665cac}.elementor-social-icon-vimeo{background-color:#1ab7ea}.elementor-social-icon-vk{background-color:#45668e}.elementor-social-icon-weibo{background-color:#dd2430}.elementor-social-icon-weixin{background-color:#31a918}.elementor-social-icon-whatsapp{background-color:#25d366}.elementor-social-icon-wordpress{background-color:#21759b}.elementor-social-icon-xing{background-color:#026466}.elementor-social-icon-yelp{background-color:#af0606}.elementor-social-icon-youtube{background-color:#cd201f}.elementor-social-icon-500px{background-color:#0099e5}.elementor-shape-rounded .elementor-icon.elementor-social-icon{border-radius:10%}.elementor-shape-circle .elementor-icon.elementor-social-icon{border-radius:50%}</style> <div class="elementor-social-icons-wrapper elementor-grid"> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-linkedin elementor-repeater-item-5c0ce3c" href="https://www.linkedin.com/company/devx" target="_blank"> <span class="elementor-screen-only">Linkedin</span> <i class="fab fa-linkedin"></i> </a> </span> <span class="elementor-grid-item"> <a class="elementor-icon elementor-social-icon elementor-social-icon-twitter elementor-repeater-item-828f132" href="https://twitter.com/DevX_Com" target="_blank"> <span class="elementor-screen-only">Twitter</span> <i class="fab fa-twitter"></i> </a> </span> </div> </div> </div> </div> </div> </div> </section> <div class="elementor-element elementor-element-6963de5 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="6963de5" data-element_type="widget" data-widget_type="divider.default"> <div class="elementor-widget-container"> <div class="elementor-divider"> <span class="elementor-divider-separator"> </span> </div> </div> </div> </div> </div> </div> </footer> <section class="elementor-section elementor-top-section elementor-element elementor-element-a4f01a6 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="a4f01a6" data-element_type="section"> <div class="elementor-container elementor-column-gap-default"> <div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-a1bc5b1" data-id="a1bc5b1" data-element_type="column"> <div class="elementor-widget-wrap"> </div> </div> <div class="elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-e4f110b" data-id="e4f110b" data-element_type="column"> <div class="elementor-widget-wrap elementor-element-populated"> <div class="elementor-element elementor-element-4a914653 elementor-widget elementor-widget-heading" data-id="4a914653" data-element_type="widget" data-widget_type="heading.default"> <div class="elementor-widget-container"> <p class="elementor-heading-title elementor-size-default">©2023 Copyright DevX - All Rights Reserved. Registration or use of this site constitutes acceptance of our Terms of Service and Privacy Policy.</p> </div> </div> <div class="elementor-element elementor-element-d2cf216 elementor-widget elementor-widget-text-editor" data-id="d2cf216" data-element_type="widget" data-widget_type="text-editor.default"> <div class="elementor-widget-container"> <style>/*! elementor - v3.12.2 - 23-04-2023 */ .elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style> <p><strong><a href="https://www.devx.com/sitemap/">Sitemap</a></strong></p> </div> </div> </div> </div> </div> </section> </footer> <link rel='stylesheet' id='elementor-icons-fa-regular-css' href='https://www.devx.com/wp-content/plugins/elementor/assets/lib/font-awesome/css/regular.min.css?ver=5.15.3' type='text/css' media='all' /> <link rel='stylesheet' id='e-animations-css' href='https://www.devx.com/wp-content/plugins/elementor/assets/lib/animations/animations.min.css?ver=3.12.2' type='text/css' media='all' /> <script type='text/javascript' src='https://www.devx.com/wp-content/themes/devxnew/assets/js/hello-frontend.min.js?ver=1.0.0' id='hello-theme-frontend-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/smartmenus/jquery.smartmenus.min.js?ver=1.0.1' id='smartmenus-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/imagesloaded.min.js?ver=4.1.4' id='imagesloaded-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/webpack-pro.runtime.min.js?ver=3.12.3' id='elementor-pro-webpack-runtime-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor/assets/js/webpack.runtime.min.js?ver=3.12.2' id='elementor-webpack-runtime-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=3.12.2' id='elementor-frontend-modules-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/dist/vendor/wp-polyfill-inert.min.js?ver=3.1.2' id='wp-polyfill-inert-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/dist/vendor/regenerator-runtime.min.js?ver=0.13.11' id='regenerator-runtime-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/dist/vendor/wp-polyfill.min.js?ver=3.15.0' id='wp-polyfill-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/dist/hooks.min.js?ver=4169d3cf8e8d95a3d6d5' id='wp-hooks-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/dist/i18n.min.js?ver=9e794f35a71bb98672ae' id='wp-i18n-js'></script> <script type='text/javascript' id='wp-i18n-js-after'> wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } ); </script> <script type='text/javascript' id='elementor-pro-frontend-js-before'> var ElementorProFrontendConfig = {"ajaxurl":"https:\/\/www.devx.com\/wp-admin\/admin-ajax.php","nonce":"208633d7e7","urls":{"assets":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor-pro\/assets\/","rest":"https:\/\/www.devx.com\/wp-json\/"},"shareButtonsNetworks":{"facebook":{"title":"Facebook","has_counter":true},"twitter":{"title":"Twitter"},"linkedin":{"title":"LinkedIn","has_counter":true},"pinterest":{"title":"Pinterest","has_counter":true},"reddit":{"title":"Reddit","has_counter":true},"vk":{"title":"VK","has_counter":true},"odnoklassniki":{"title":"OK","has_counter":true},"tumblr":{"title":"Tumblr"},"digg":{"title":"Digg"},"skype":{"title":"Skype"},"stumbleupon":{"title":"StumbleUpon","has_counter":true},"mix":{"title":"Mix"},"telegram":{"title":"Telegram"},"pocket":{"title":"Pocket","has_counter":true},"xing":{"title":"XING","has_counter":true},"whatsapp":{"title":"WhatsApp"},"email":{"title":"Email"},"print":{"title":"Print"}},"facebook_sdk":{"lang":"en_US","app_id":""},"lottie":{"defaultAnimationUrl":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor-pro\/modules\/lottie\/assets\/animations\/default.json"}}; </script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/frontend.min.js?ver=3.12.3' id='elementor-pro-frontend-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor/assets/lib/waypoints/waypoints.min.js?ver=4.0.2' id='elementor-waypoints-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-includes/js/jquery/ui/core.min.js?ver=1.13.2' id='jquery-ui-core-js'></script> <script type='text/javascript' id='elementor-frontend-js-before'> var elementorFrontendConfig = {"environmentMode":{"edit":false,"wpPreview":false,"isScriptDebug":false},"i18n":{"shareOnFacebook":"Share on Facebook","shareOnTwitter":"Share on Twitter","pinIt":"Pin it","download":"Download","downloadImage":"Download image","fullscreen":"Fullscreen","zoom":"Zoom","share":"Share","playVideo":"Play Video","previous":"Previous","next":"Next","close":"Close"},"is_rtl":false,"breakpoints":{"xs":0,"sm":480,"md":768,"lg":1025,"xl":1440,"xxl":1600},"responsive":{"breakpoints":{"mobile":{"label":"Mobile Portrait","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Landscape","value":880,"default_value":880,"direction":"max","is_enabled":false},"tablet":{"label":"Tablet Portrait","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet Landscape","value":1200,"default_value":1200,"direction":"max","is_enabled":false},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":false},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":false}}},"version":"3.12.2","is_static":false,"experimentalFeatures":{"e_dom_optimization":true,"e_optimized_assets_loading":true,"e_optimized_css_loading":true,"a11y_improvements":true,"additional_custom_breakpoints":true,"theme_builder_v2":true,"hello-theme-header-footer":true,"landing-pages":true,"page-transitions":true,"notes":true,"loop":true,"form-submissions":true,"e_scroll_snap":true},"urls":{"assets":"https:\/\/www.devx.com\/wp-content\/plugins\/elementor\/assets\/"},"swiperClass":"swiper-container","settings":{"page":[],"editorPreferences":[]},"kit":{"body_background_background":"classic","active_breakpoints":["viewport_mobile","viewport_tablet"],"global_image_lightbox":"yes","lightbox_enable_counter":"yes","lightbox_enable_fullscreen":"yes","lightbox_enable_zoom":"yes","lightbox_enable_share":"yes","lightbox_title_src":"title","lightbox_description_src":"description","hello_header_logo_type":"logo","hello_header_menu_layout":"horizontal","hello_footer_logo_type":"logo"},"post":{"id":22656,"title":"Connecting%20to%20the%20Web%3A%20I%2FO%20Programming%20in%20Android%20-%20DevX","excerpt":"","featuredImage":"https:\/\/www.devx.com\/wp-content\/uploads\/2022\/02\/thumbnail.jpg"}}; </script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor/assets/js/frontend.min.js?ver=3.12.2' id='elementor-frontend-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/js/elements-handlers.min.js?ver=3.12.3' id='pro-elements-handlers-js'></script> <script type='text/javascript' src='https://www.devx.com/wp-content/plugins/elementor-pro/assets/lib/sticky/jquery.sticky.min.js?ver=3.12.3' id='e-sticky-js'></script> </body> </html> <!-- Dynamic page generated in 1.182 seconds. --> <!-- Cached page generated by WP-Super-Cache on 2023-06-10 02:04:48 --> <!-- Compression = gzip -->