<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-cite-prefix">Hi Nuno,<br>
    </div>
    <div class="moz-cite-prefix"><br>
    </div>
    <div class="moz-cite-prefix">Am 03.09.21 um 11:05 schrieb Nuno
      Santos:<br>
    </div>
    <blockquote type="cite"
      cite="mid:B5BE20CC-C8FB-45FB-A4D5-53F53F7743A0@imaginando.pt">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      Ekke,
      <div class=""><br class="">
      </div>
      <div class="">I have been experiencing some inconsistencies with
        Android file access using QStandardPaths, mostly now that I’m
        preparing the ground for Android 11 support. From Android 11
        onwards, there will be changes in the way an app can access
        filesystem resources.</div>
      <div class=""><br class="">
      </div>
      <div class="">This problem started when one of apps was in some
        systems using legacy file access while in others was already
        using the new storage approach. In order to temporary fixes this
        issues I have set the requestLegacyExternalStorage to true,
        however, soon this will end as in Android 11 it will be ignored.
        <br>
      </div>
    </blockquote>
    <p>I'm in the same situation as you ;-) have set
      requestLegacyExternalStorage ATM</p>
    <p>last weeks had much work moving all my projects from Qt 5.13.2 to
      5.15.5, so I can prepare for Qt 6.2</p>
    <p>now there will be 3 weeks vacation</p>
    <p>then support of Android 11 file storage will be high on my TODO
      list</p>
    <p>... and hoping then to find some docs / tips HowTo support this
      from Qt ;-)<br>
    </p>
    <p>ekke<br>
    </p>
    <blockquote type="cite"
      cite="mid:B5BE20CC-C8FB-45FB-A4D5-53F53F7743A0@imaginando.pt">
      <div class=""><br class="">
      </div>
      <div class="">One of the current challenges I’m facing the
        moving/copying resources from legacy storage to new storage when
        using QStandardPaths and QFileDialog.</div>
      <div class=""><br class="">
      </div>
      <div class="">How have you been handling Android 11 support and
        data migration from older versions?</div>
      <div class=""><br class="">
      </div>
      <div class="">Are you able to do it just with Qt stuff or do you
        need to handle some of the things with native android API’s?</div>
      <div class=""><br class="">
      </div>
      <div class="">Thanks!</div>
      <div class=""><br class="">
      </div>
      <div class="">Nuno</div>
      <div class=""><br class="">
      </div>
      <div class="">
        <div>
          <blockquote type="cite" class="">
            <div class="">On 31 Aug 2021, at 13:38, ekke <<a
                href="mailto:ekke@ekkes-corner.org" class=""
                moz-do-not-send="true">ekke@ekkes-corner.org</a>>
              wrote:</div>
            <br class="Apple-interchange-newline">
            <div class="">
              <meta charset="UTF-8" class="">
              <div class="moz-cite-prefix" style="caret-color: rgb(0, 0,
                0); font-family: Helvetica; font-size: 12px; font-style:
                normal; font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;">Am 31.08.21 um 14:12 schrieb
                Wilhelm Meier via Interest:<br class="">
              </div>
              <blockquote type="cite"
                cite="mid:64d82082-edaa-5f61-2f60-2e04bcaed692@googlemail.com"
                style="font-family: Helvetica; font-size: 12px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px; text-decoration: none;"
                class="">
                <pre class="moz-quote-pre" wrap="">Hi all,

does anybody have a minimum working example how to load / save json file
contents (auscii contents) to / from a file on android.

I made several attempts, but I get weird filenames and I'm not able to
load the stored file.

thx
_______________________________________________
Interest mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Interest@qt-project.org" moz-do-not-send="true">Interest@qt-project.org</a>
<a class="moz-txt-link-freetext" href="https://lists.qt-project.org/listinfo/interest" moz-do-not-send="true">https://lists.qt-project.org/listinfo/interest</a>
</pre>
              </blockquote>
              <pre style="caret-color: rgb(0, 0, 0); font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; margin: 0px;" class=""><span style="color: rgb(128, 0, 128);" class="">Hi,
some snippets HowTo save a JSON. use QVariantMap for a JSON Object or QVariantList for JSON Array

    QJsonDocument</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">jda</span> <span style="color: rgb(0, 103, 124);" class="">=</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(128, 0, 128);" class="">QJsonDocument</span>::<span style="color: rgb(0, 103, 124);" class="">fromVariant</span>(myQVariantMap);</pre>
              <pre style="caret-color: rgb(0, 0, 0); font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; margin: 0px;" class=""><span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(128, 0, 128);" class="">QByteArray</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">buffer</span><span style="color: rgb(192, 192, 192);" class=""> </span>=<span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">jda</span>.<span style="color: rgb(0, 103, 124);" class="">toJson</span>();</pre>
              <pre style="caret-color: rgb(0, 0, 0); font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; margin: 0px;" class=""><span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(0, 103, 124);" class="">saveTestFile</span>(<span style="color: rgb(0, 128, 0);" class="">"_my_test.json"</span>,<span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">buffer</span>);
...

<span style="color: rgb(128, 128, 0);" class="">void</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(128, 0, 128);" class="">DataServer</span>::<span style="font-weight: 600; color: rgb(0, 103, 124);" class="">saveTestFile</span>(<span style="color: rgb(128, 128, 0);" class="">const</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(128, 0, 128);" class="">QString</span>&<span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">fileName</span>,<span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(128, 128, 0);" class="">const</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(128, 0, 128);" class="">QByteArray</span>&<span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">buffer</span>)
{
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(128, 0, 128);" class="">QString</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">filePath</span><span style="color: rgb(192, 192, 192);" class=""> </span>=<span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(128, 0, 0);" class="">mDataManager</span>-><span style="color: rgb(0, 103, 124);" class="">dataPath</span>(<span style="color: rgb(9, 46, 100);" class="">fileName</span>);
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(128, 0, 128);" class="">QFile</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">saveFile</span>(<span style="color: rgb(9, 46, 100);" class="">filePath</span>);
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(128, 128, 0);" class="">if</span><span style="color: rgb(192, 192, 192);" class=""> </span>(!<span style="color: rgb(9, 46, 100);" class="">saveFile</span>.<span style="font-style: italic; color: rgb(0, 103, 124);" class="">open</span>(<span style="color: rgb(128, 0, 128);" class="">QIODevice</span>::<span style="color: rgb(128, 0, 128);" class="">WriteOnly</span>))<span style="color: rgb(192, 192, 192);" class=""> </span>{
<span style="color: rgb(192, 192, 192);" class="">        </span><span style="color: rgb(0, 0, 128);" class="">qWarning</span>()<span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class=""><<</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">"Couldn't open file to write "</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class=""><<</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">filePath</span>;
<span style="color: rgb(192, 192, 192);" class="">        </span><span style="color: rgb(128, 128, 0);" class="">return</span>;
<span style="color: rgb(192, 192, 192);" class="">    </span>}
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(128, 0, 128);" class="">qint64</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">bytesWritten</span><span style="color: rgb(192, 192, 192);" class=""> </span>=<span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">saveFile</span>.<span style="color: rgb(0, 103, 124);" class="">write</span>(<span style="color: rgb(9, 46, 100);" class="">buffer</span>);
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(9, 46, 100);" class="">saveFile</span>.<span style="font-style: italic; color: rgb(0, 103, 124);" class="">close</span>();
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(0, 0, 128);" class="">qDebug</span>()<span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class=""><<</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">"Bytes written: "</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class=""><<</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">bytesWritten</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class=""><<</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">" to: "</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class=""><<</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">filePath</span>;
}
....

<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(0, 128, 0);" class="">//</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">Android:</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">AppDataLocation</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">works</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">out</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">of</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">the</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">box,</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">iOS</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">you</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">must</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">create</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">the</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">DIR</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">first</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 128, 0);" class="">!!</span>
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(128, 0, 0);" class="">mDataRoot</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class="">=</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(128, 0, 128);" class="">QStandardPaths</span>::<span style="color: rgb(0, 103, 124);" class="">standardLocations</span>(<span style="color: rgb(128, 0, 128);" class="">QStandardPaths</span>::<span style="color: rgb(128, 0, 128);" class="">AppDataLocation</span>).<span style="color: rgb(0, 103, 124);" class="">value</span>(<span style="color: rgb(0, 0, 128);" class="">0</span>);
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(128, 0, 0);" class="">mDataPath</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class="">=</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(128, 0, 0);" class="">mDataRoot</span><span style="color: rgb(0, 103, 124);" class="">+</span><span style="color: rgb(0, 128, 0);" class="">"/data/"</span>;
----
and reading is similar

<span style="color: rgb(9, 46, 100);" class="">    jda</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class="">=</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(128, 0, 128);" class="">QJsonDocument</span>::<span style="color: rgb(0, 103, 124);" class="">fromJson</span>(<span style="color: rgb(9, 46, 100);" class="">dataFile</span>.<span style="color: rgb(0, 103, 124);" class="">readAll</span>());
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(9, 46, 100);" class="">dataFile</span>.<span style="font-style: italic; color: rgb(0, 103, 124);" class="">close</span>();
<span style="color: rgb(192, 192, 192);" class="">    </span><span style="color: rgb(128, 128, 0);" class="">if</span>(!<span style="color: rgb(9, 46, 100);" class="">jda</span>.<span style="color: rgb(0, 103, 124);" class="">isArray</span>())<span style="color: rgb(192, 192, 192);" class=""> </span>{
<span style="color: rgb(192, 192, 192);" class="">        </span>myMap = <span style="color: rgb(192, 192, 192);" class=""></span><span style="color: rgb(9, 46, 100);" class="">jda</span>.<span style="color: rgb(0, 103, 124);" class="">toVariant</span>().<span style="color: rgb(0, 103, 124);" class="">toMap</span>();
<span style="color: rgb(192, 192, 192);" class="">    </span>} else {
       my<span style="color: rgb(9, 46, 100);" class="">List</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(0, 103, 124);" class="">=</span><span style="color: rgb(192, 192, 192);" class=""> </span><span style="color: rgb(9, 46, 100);" class="">jda</span>.<span style="color: rgb(0, 103, 124);" class="">toVariant</span>().<span style="color: rgb(0, 103, 124);" class="">toList</span>();
    }
-----
hope it helps</pre>
              <span style="caret-color: rgb(0, 0, 0); font-family:
                Helvetica; font-size: 12px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">_______________________________________________</span><br
                style="caret-color: rgb(0, 0, 0); font-family:
                Helvetica; font-size: 12px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <span style="caret-color: rgb(0, 0, 0); font-family:
                Helvetica; font-size: 12px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none; float: none; display: inline
                !important;" class="">Interest mailing list</span><br
                style="caret-color: rgb(0, 0, 0); font-family:
                Helvetica; font-size: 12px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <a href="mailto:Interest@qt-project.org"
                style="font-family: Helvetica; font-size: 12px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px;" class=""
                moz-do-not-send="true">Interest@qt-project.org</a><br
                style="caret-color: rgb(0, 0, 0); font-family:
                Helvetica; font-size: 12px; font-style: normal;
                font-variant-caps: normal; font-weight: normal;
                letter-spacing: normal; text-align: start; text-indent:
                0px; text-transform: none; white-space: normal;
                word-spacing: 0px; -webkit-text-stroke-width: 0px;
                text-decoration: none;" class="">
              <a href="https://lists.qt-project.org/listinfo/interest"
                style="font-family: Helvetica; font-size: 12px;
                font-style: normal; font-variant-caps: normal;
                font-weight: normal; letter-spacing: normal; orphans:
                auto; text-align: start; text-indent: 0px;
                text-transform: none; white-space: normal; widows: auto;
                word-spacing: 0px; -webkit-text-size-adjust: auto;
                -webkit-text-stroke-width: 0px;" class=""
                moz-do-not-send="true">https://lists.qt-project.org/listinfo/interest</a></div>
          </blockquote>
        </div>
        <br class="">
      </div>
    </blockquote>
    <br>
  </body>
</html>