<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic HttpURLConnection and expired tokens in ArcGIS Runtime SDK for Android Questions</title>
    <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/httpurlconnection-and-expired-tokens/m-p/25762#M186</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am trying to access a TPK for download using HttpURLConnection. &amp;nbsp;The reason I am doing it this way versus&amp;nbsp;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN style="color: #808080;"&gt;InputStream is = item.fetchData();
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;is because i want to be able to resume download by setting a Range in Bytes to resume download when a network connection is available again.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Issue is this. &amp;nbsp;I can download a TPK right after logging into the application (before token expires) with the following code...&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;requestUrl = portal.getUrl() + &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/sharing/rest/content/items/" &lt;/SPAN&gt;+ &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;itemID &lt;/SPAN&gt;+ &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/data?token=" &lt;/SPAN&gt;+ &lt;SPAN style="color: #660e7a;"&gt;mValidLoginCredentials&lt;/SPAN&gt;.getToken();
URL url2 = &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;URL(requestUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url2.openConnection();
&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN style="background-color: #e4e4ff;"&gt;urlConnection&lt;/SPAN&gt;.setRequestProperty(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"Range"&lt;/SPAN&gt;, &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"bytes=" &lt;/SPAN&gt;+ (baseMapFile.length()) + &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"-"&lt;/SPAN&gt;);
&lt;SPAN style="background-color: #e4e4ff;"&gt;urlConnection&lt;/SPAN&gt;.setRequestProperty(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"If-Range"&lt;/SPAN&gt;, &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;lastModified&lt;/SPAN&gt;);
&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;inputStream &lt;/SPAN&gt;= &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;BufferedInputStream(&lt;SPAN style="background-color: #e4e4ff;"&gt;urlConnection&lt;/SPAN&gt;.getInputStream(), &lt;SPAN style="color: #0000ff;"&gt;16384&lt;/SPAN&gt;);

I am wondering &lt;SPAN style="color: #3d3d3d;"&gt;how I can regenerate a token from credentials so that I can provide the new token into the requestURL variable.
I have tried a couple of things that do not work...

1.&amp;nbsp; Trying to setUserToken then use it does not work
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;portal.getCredentials().setUserToken(mValidLoginCredentials.getToken(), portal.getUrl());
&lt;/SPAN&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;requestUrl = portal.getUrl() + &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/sharing/rest/content/items/" &lt;/SPAN&gt;+ &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;itemID &lt;/SPAN&gt;+ &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/data?token=" &lt;/SPAN&gt;+ portal.getCredentials().&lt;SPAN style="background-color: #e4e4ff;"&gt;getToken&lt;/SPAN&gt;();&lt;/PRE&gt;&lt;/PRE&gt;&lt;/PRE&gt;&lt;SPAN style="color: #808080;"&gt;2. Trying to generate token. Probably bad syntax here...&lt;BR /&gt;&lt;/SPAN&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN&gt;requestUrl = portal.getUrl() + "/sharing/rest/content/items/" + itemID + "/data?token=tokens/generateToken?username=mMouse&amp;amp;password=****;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/PRE&gt;&lt;P&gt;I am pretty sure it is some sort of syntax issue here. &amp;nbsp;Any advice greatly appreciated. &amp;nbsp;Am using Runtime SDK Android 10.2.9.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 10 Dec 2021 21:02:33 GMT</pubDate>
    <dc:creator>Anonymous User</dc:creator>
    <dc:date>2021-12-10T21:02:33Z</dc:date>
    <item>
      <title>HttpURLConnection and expired tokens</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/httpurlconnection-and-expired-tokens/m-p/25762#M186</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am trying to access a TPK for download using HttpURLConnection. &amp;nbsp;The reason I am doing it this way versus&amp;nbsp;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN style="color: #808080;"&gt;InputStream is = item.fetchData();
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;is because i want to be able to resume download by setting a Range in Bytes to resume download when a network connection is available again.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Issue is this. &amp;nbsp;I can download a TPK right after logging into the application (before token expires) with the following code...&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;requestUrl = portal.getUrl() + &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/sharing/rest/content/items/" &lt;/SPAN&gt;+ &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;itemID &lt;/SPAN&gt;+ &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/data?token=" &lt;/SPAN&gt;+ &lt;SPAN style="color: #660e7a;"&gt;mValidLoginCredentials&lt;/SPAN&gt;.getToken();
URL url2 = &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;URL(requestUrl);
HttpURLConnection urlConnection = (HttpURLConnection) url2.openConnection();
&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN style="background-color: #e4e4ff;"&gt;urlConnection&lt;/SPAN&gt;.setRequestProperty(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"Range"&lt;/SPAN&gt;, &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"bytes=" &lt;/SPAN&gt;+ (baseMapFile.length()) + &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"-"&lt;/SPAN&gt;);
&lt;SPAN style="background-color: #e4e4ff;"&gt;urlConnection&lt;/SPAN&gt;.setRequestProperty(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"If-Range"&lt;/SPAN&gt;, &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;lastModified&lt;/SPAN&gt;);
&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;inputStream &lt;/SPAN&gt;= &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;BufferedInputStream(&lt;SPAN style="background-color: #e4e4ff;"&gt;urlConnection&lt;/SPAN&gt;.getInputStream(), &lt;SPAN style="color: #0000ff;"&gt;16384&lt;/SPAN&gt;);

I am wondering &lt;SPAN style="color: #3d3d3d;"&gt;how I can regenerate a token from credentials so that I can provide the new token into the requestURL variable.
I have tried a couple of things that do not work...

1.&amp;nbsp; Trying to setUserToken then use it does not work
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;portal.getCredentials().setUserToken(mValidLoginCredentials.getToken(), portal.getUrl());
&lt;/SPAN&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;requestUrl = portal.getUrl() + &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/sharing/rest/content/items/" &lt;/SPAN&gt;+ &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;itemID &lt;/SPAN&gt;+ &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/data?token=" &lt;/SPAN&gt;+ portal.getCredentials().&lt;SPAN style="background-color: #e4e4ff;"&gt;getToken&lt;/SPAN&gt;();&lt;/PRE&gt;&lt;/PRE&gt;&lt;/PRE&gt;&lt;SPAN style="color: #808080;"&gt;2. Trying to generate token. Probably bad syntax here...&lt;BR /&gt;&lt;/SPAN&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN&gt;requestUrl = portal.getUrl() + "/sharing/rest/content/items/" + itemID + "/data?token=tokens/generateToken?username=mMouse&amp;amp;password=****;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/PRE&gt;&lt;P&gt;I am pretty sure it is some sort of syntax issue here. &amp;nbsp;Any advice greatly appreciated. &amp;nbsp;Am using Runtime SDK Android 10.2.9.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 21:02:33 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/httpurlconnection-and-expired-tokens/m-p/25762#M186</guid>
      <dc:creator>Anonymous User</dc:creator>
      <dc:date>2021-12-10T21:02:33Z</dc:date>
    </item>
    <item>
      <title>Re: HttpURLConnection and expired tokens</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/httpurlconnection-and-expired-tokens/m-p/25763#M187</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi &lt;A href="https://community.esri.com/migrated-users/6510"&gt;Aaron Dick&lt;/A&gt;‌,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What you could do is when you launch the app, is load your stored serialized credentials and using a new UserCredentials class&amp;nbsp;&lt;A class="link-titled" href="https://developers.arcgis.com/android/10-2/api-reference/reference/com/esri/core/io/UserCredentials.html" title="https://developers.arcgis.com/android/10-2/api-reference/reference/com/esri/core/io/UserCredentials.html"&gt;UserCredentials | ArcGIS Android 10.2.9 API&lt;/A&gt;, all the setUserAccount(String userName, String password) method and then subsequently call the getToken() method on the object so you can get a new valid token. &amp;nbsp;You look to be trying to generate a token manually through a rest call but using the SDK might be a better way to go here.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Alexander&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 14 Apr 2017 15:28:46 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/httpurlconnection-and-expired-tokens/m-p/25763#M187</guid>
      <dc:creator>AlexanderNohe1</dc:creator>
      <dc:date>2017-04-14T15:28:46Z</dc:date>
    </item>
    <item>
      <title>Re: HttpURLConnection and expired tokens</title>
      <link>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/httpurlconnection-and-expired-tokens/m-p/25764#M188</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Alex, this advise helped me get on the right track with this. &amp;nbsp;&lt;/P&gt;&lt;P&gt;The critical bit was to use the credentials with PortalItem.fetchItem to establish a new token.&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;Portal &lt;SPAN style="background-color: #ffe4ff;"&gt;portal&lt;/SPAN&gt; = &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;Portal(url, uc);
PortalItem item = PortalItem.&lt;SPAN&gt;fetchItem&lt;/SPAN&gt;(&lt;SPAN style="background-color: #e4e4ff;"&gt;portal&lt;/SPAN&gt;, &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;itemID&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If anyone ever runs into issues trying to download &amp;nbsp;from AGOL via HttpURLConnection using token authentication below is the code that worked.....&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;/PRE&gt;&lt;/PRE&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;SPAN style="color: #000080; font-weight: bold;"&gt;try &lt;/SPAN&gt;{
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #808080;"&gt;// Fetch the portal item by ID, and the data, passing in a Portal with an
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp; // authenticated user with access to the item.
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;String url = &lt;SPAN style="color: #008000; font-weight: bold;"&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.esri.com/external-link.jspa?url=https%3A%2F%2Fwww.arcgis.com" target="_blank"&gt;https://www.arcgis.com&lt;/A&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;/SPAN&gt;;
&amp;nbsp;&amp;nbsp; UserCredentials uc = &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;UserCredentials();
&amp;nbsp;&amp;nbsp; uc = &lt;SPAN style="color: #660e7a;"&gt;mValidLoginCredentials&lt;/SPAN&gt;;
&amp;nbsp;&amp;nbsp; Portal portal = &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;Portal(url, uc);
&amp;nbsp;&amp;nbsp; PortalItem item = PortalItem.&lt;SPAN&gt;fetchItem&lt;/SPAN&gt;(portal, &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;itemID&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp; String requestUrl = portal.getUrl() + &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/sharing/rest/content/items/" &lt;/SPAN&gt;+ &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;itemID &lt;/SPAN&gt;+ &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/data"&lt;/SPAN&gt;;
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;if&lt;/SPAN&gt;(&lt;SPAN style="color: #660e7a;"&gt;mValidLoginCredentials&lt;/SPAN&gt;!=&lt;SPAN style="color: #000080; font-weight: bold;"&gt;null&lt;/SPAN&gt;) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String token = portal.getCredentials().getToken();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; requestUrl = portal.getUrl() + &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/sharing/rest/content/items/" &lt;/SPAN&gt;+ &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;itemID &lt;/SPAN&gt;+ &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/data?token=" &lt;/SPAN&gt;+ token;
&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp; URL url2 = &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;URL(requestUrl);
&amp;nbsp;&amp;nbsp; HttpURLConnection urlConnection = (HttpURLConnection) url2.openConnection();
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;filePath &lt;/SPAN&gt;= &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;dataWorkingDirectory &lt;/SPAN&gt;+ &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"/Offline_Base_Maps/" &lt;/SPAN&gt;+ item.getName();
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;TPKPath &lt;/SPAN&gt;= &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;filePath&lt;/SPAN&gt;;
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;int &lt;/SPAN&gt;len = &lt;SPAN style="color: #0000ff;"&gt;0&lt;/SPAN&gt;;
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #808080;"&gt;//Check if file exists already
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;File baseMapFile = &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;File(&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;filePath&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;int &lt;/SPAN&gt;&lt;SPAN style="background-color: #ffe4ff;"&gt;length&lt;/SPAN&gt; = &lt;SPAN style="color: #0000ff;"&gt;0&lt;/SPAN&gt;;

&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;if &lt;/SPAN&gt;(baseMapFile.exists()) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: #ffe4ff;"&gt;length&lt;/SPAN&gt; = (&lt;SPAN style="color: #000080; font-weight: bold;"&gt;int&lt;/SPAN&gt;) baseMapFile.length();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;if &lt;/SPAN&gt;(&lt;SPAN style="background-color: #e4e4ff;"&gt;length&lt;/SPAN&gt;==&lt;SPAN style="color: #0000ff;"&gt;0&lt;/SPAN&gt;) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;lastModified &lt;/SPAN&gt;= urlConnection.getHeaderField(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"Last-Modified"&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;inputStream &lt;/SPAN&gt;= &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;BufferedInputStream(urlConnection.getInputStream(), &lt;SPAN style="color: #0000ff;"&gt;16384&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;file_size &lt;/SPAN&gt;= urlConnection.getContentLength();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;SPAN style="color: #000080; font-weight: bold;"&gt;else&lt;/SPAN&gt;{

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; urlConnection.setRequestProperty(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"Range"&lt;/SPAN&gt;, &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"bytes=" &lt;/SPAN&gt;+ (baseMapFile.length()) + &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"-"&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; urlConnection.setRequestProperty(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"If-Range"&lt;/SPAN&gt;, &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;lastModified&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;inputStream &lt;/SPAN&gt;= &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;BufferedInputStream(urlConnection.getInputStream(), &lt;SPAN style="color: #0000ff;"&gt;16384&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }


&amp;nbsp;&amp;nbsp; }&lt;SPAN style="color: #000080; font-weight: bold;"&gt;else&lt;/SPAN&gt;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;lastModified &lt;/SPAN&gt;= urlConnection.getHeaderField(&lt;SPAN style="color: #008000; font-weight: bold;"&gt;"Last-Modified"&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;inputStream &lt;/SPAN&gt;= &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;BufferedInputStream(urlConnection.getInputStream(), &lt;SPAN style="color: #0000ff;"&gt;16384&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;file_size &lt;/SPAN&gt;= urlConnection.getContentLength();
&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;long &lt;/SPAN&gt;fileLength = Long.&lt;SPAN&gt;valueOf&lt;/SPAN&gt;(&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;file_size&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;int &lt;/SPAN&gt;latestPercentDone;
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;int &lt;/SPAN&gt;lastPercentDone = &lt;SPAN style="color: #0000ff;"&gt;0&lt;/SPAN&gt;;
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #808080;"&gt;// Save the data to a file.
&lt;/SPAN&gt;&lt;SPAN style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;outputStream &lt;/SPAN&gt;=(&lt;SPAN style="background-color: #e4e4ff;"&gt;length&lt;/SPAN&gt;==&lt;SPAN style="color: #0000ff;"&gt;0&lt;/SPAN&gt;)? &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;FileOutputStream(&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;filePath&lt;/SPAN&gt;): &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new &lt;/SPAN&gt;FileOutputStream(&lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;filePath&lt;/SPAN&gt;,&lt;SPAN style="color: #000080; font-weight: bold;"&gt;true&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;byte&lt;/SPAN&gt;[] buf = &lt;SPAN style="color: #000080; font-weight: bold;"&gt;new byte&lt;/SPAN&gt;[&lt;SPAN style="color: #0000ff;"&gt;16384&lt;/SPAN&gt;];
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;int &lt;/SPAN&gt;size = &lt;SPAN style="color: #0000ff;"&gt;0&lt;/SPAN&gt;;

&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;while &lt;/SPAN&gt;((len = &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;inputStream&lt;/SPAN&gt;.read(buf)) != -&lt;SPAN style="color: #0000ff;"&gt;1&lt;/SPAN&gt;) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;outputStream&lt;/SPAN&gt;.write(buf, &lt;SPAN style="color: #0000ff;"&gt;0&lt;/SPAN&gt;, len);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="background-color: #ffe4ff;"&gt;length&lt;/SPAN&gt; += len;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; latestPercentDone = (&lt;SPAN style="color: #000080; font-weight: bold;"&gt;int&lt;/SPAN&gt;) Math.&lt;SPAN&gt;round&lt;/SPAN&gt;(&lt;SPAN style="background-color: #e4e4ff;"&gt;length&lt;/SPAN&gt; * &lt;SPAN style="color: #0000ff;"&gt;100.0 &lt;/SPAN&gt;/ fileLength);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #000080; font-weight: bold;"&gt;if &lt;/SPAN&gt;(lastPercentDone != latestPercentDone) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; publishProgress(latestPercentDone);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lastPercentDone = latestPercentDone;

&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;mNotificationHelper&lt;/SPAN&gt;.completed();
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;outputStream&lt;/SPAN&gt;.flush();
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;outputStream&lt;/SPAN&gt;.close();
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;inputStream&lt;/SPAN&gt;.close();
&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #660e7a; font-weight: bold;"&gt;error &lt;/SPAN&gt;= &lt;SPAN style="color: #008000; font-weight: bold;"&gt;"done"&lt;/SPAN&gt;;
} &lt;SPAN style="color: #000080; font-weight: bold;"&gt;catch &lt;/SPAN&gt;(Exception e) {
&amp;nbsp;&amp;nbsp; e.printStackTrace();
}&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 21:02:36 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-runtime-sdk-for-android-questions/httpurlconnection-and-expired-tokens/m-p/25764#M188</guid>
      <dc:creator>Anonymous User</dc:creator>
      <dc:date>2021-12-10T21:02:36Z</dc:date>
    </item>
  </channel>
</rss>

