ArrayIndexOutOfBoundsException в Android 9.0 - PullRequest
0 голосов
/ 18 марта 2019

У меня странная проблема в производстве только в Android 9.0, приложение в работе очень долго, и эта проблема начинается в Android 9.0

Процесс: com.ae.paris10, PID: 18804 java.lang.ArrayIndexOutOfBoundsException: length = 984; regionStart = 0; regionLength = 1024
в java.util.Arrays.checkOffsetAndCount (Arrays.java:1719)
в libcore.io.IoBridge.write (IoBridge.java:487)
в java.io.FileOutputStream.write (FileOutputStream.java:186)

   private void copyStyleWithNewTilesPath() throws IOException {

        InputStream myinput = getContext()
                .getAssets().open("styleParis.json");


        String outfilename = "/data/data/" + Config.APPLICATION_ID + "/databases/styleParis.json";


        OutputStream myoutput = new FileOutputStream(outfilename);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = myinput.read(buffer)) > 0) {

            String str = new String(buffer, "UTF-8");

            if (str.contains("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf")) {
  buffer = str.replace("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf", "file://" + obbPath + "/{z}/{x}/{y}.pbf").getBytes("UTF-8");
            }

            myoutput.write(buffer, 0, length); <<--- EXCEPTION HERE <<-----------
        }

        //Close the streams
        myoutput.flush();
        myoutput.close();
        myinput.close();
    }

Я не совсем понимаю, что происходит, поскольку в FileOutputStream используется среда Java и Android.

У кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 19 марта 2019
if (str.contains("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf"))
    // write(byte[] b) :: Writes b.length bytes from the specified byte array to myoutput. 
    myoutput.write(str.replace("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf", "file://" + obbPath + "/{z}/{x}/{y}.pbf").getBytes("UTF-8"));
else
    myoutput.write(buffer, 0, length);
1 голос
/ 19 марта 2019

Я думаю, что это решит вашу проблему:

if (str.contains("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf"))
    myoutput.write(str.replace("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf", "file://" + obbPath + "/{z}/{x}/{y}.pbf").getBytes("UTF-8"));
else
    myoutput.write(buffer, 0, length);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...