Форум программистов, компьютерный форум CyberForum.ru

EditText долго отображается - Android

Восстановить пароль Регистрация
 
UginL7
2 / 2 / 0
Регистрация: 18.08.2010
Сообщений: 22
Завершенные тесты: 1
23.11.2016, 15:46     EditText долго отображается #1
Добрый день! Делаю для себя редактор, заодно и учусь писать приложения для Android, и столкнулся с такой проблемой, при открытии файла большого размера (например 17Кб отображается примерно черзе 25 секунд, а 35Кб - через 3 минуты). Вывод делаю в стандартный EditText (MultiLine text). Проверяю всё на Lenovo A820.
Буду рад любой помощи!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2016, 15:46     EditText долго отображается
Посмотрите здесь:

Свойства EditTExt Android
Долго не отображается форма Android
Android Очистка EditText
Android Касание в EditText
Android EditText
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1794 / 1528 / 475
Регистрация: 12.05.2014
Сообщений: 5,574
Завершенные тесты: 1
23.11.2016, 15:53     EditText долго отображается #2
кода нет вообще?
UginL7
2 / 2 / 0
Регистрация: 18.08.2010
Сообщений: 22
Завершенные тесты: 1
23.11.2016, 16:30  [ТС]     EditText долго отображается #3
Тупанул, сразу не выложил, как раз об этом подумал...
Вот код
XML
1
2
3
4
5
6
7
8
<EditText
            android:id="@+id/TextEdit"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:inputType="textMultiLine"
            android:ems="10"
            android:scrollbars="vertical|horizontal"  />
Java
1
2
3
4
5
6
7
8
    private EditText mEditText;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hex_view);
        this.mEditText = (EditText) findViewById(R.id.TextEdit);
    }
Открытие файла, чтение и вывод на экран

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
private void openFileHex(String fileName) {
                        
            try {
                InputStream is = new FileInputStream(fileName);
                int value;              
                int bytesCounter = 0;
                StringBuilder sbText = new StringBuilder();
                StringBuilder sbResEdit = new StringBuilder();
 
                while ((value = is.read()) != -1) {
                    if (!Character.isISOControl(value)) {
                        sbText.append((char) value);
                    } else {
                        sbText.append(".");
                    }
 
                    if (bytesCounter == 7) {
                        sbResEdit.append(sbText.toString()).append("\n");
                        sbText.setLength(0);
                        bytesCounter = 0;
                    } else {
                        bytesCounter++;
                    }
                }
 
                if (bytesCounter != 0) {
                    sbResEdit.append(sbText).append("\n");
                }
                is.close();
                
        mEditText.setText(sbResEdit.toString());
                
            } catch (IOException  t) {
                Toast.makeText(getApplicationContext(),
                        "Exception: " + t.toString(), Toast.LENGTH_LONG).show();
            }
        }
Паблито
не спать!
1794 / 1528 / 475
Регистрация: 12.05.2014
Сообщений: 5,574
Завершенные тесты: 1
23.11.2016, 16:40     EditText долго отображается #4
а где лежит этот файл?
это просто текст?
в цикле вообще какая-то магия непонятная происходит
UginL7
2 / 2 / 0
Регистрация: 18.08.2010
Сообщений: 22
Завершенные тесты: 1
23.11.2016, 17:12  [ТС]     EditText долго отображается #5
Файлик я выбираю сам по нажатию на кнопочку "Открыть", лежит вообще в корне SD-карты. Пока работаю только с текстом, вообще хочу сделать HEX-редактор. Магия проста, по 8 байт читаю и перехожу на новую строку, а потом проверяю, если что-то осталось, то дописываю в последнюю строку.
Паблито
не спать!
1794 / 1528 / 475
Регистрация: 12.05.2014
Сообщений: 5,574
Завершенные тесты: 1
23.11.2016, 17:21     EditText долго отображается #6
тогда как минимум можно использовать BufferedInputStream, в него завернуть InputStream и потом read() вызывать уже у BufferedInputStream
Java
1
2
                BufferedInputStream bis = new BufferedInputStream(is);
                bis.read()
Добавлено через 2 минуты
Java
1
sbResEdit.append(sbText).append("\n");
тут не обязательно вызывать toString(), но это мелочь и на скорости особо не отразится
UginL7
2 / 2 / 0
Регистрация: 18.08.2010
Сообщений: 22
Завершенные тесты: 1
23.11.2016, 17:33  [ТС]     EditText долго отображается #7
В отладчике считывание и форматирование происходит быстро, а вот потом, когда уже доходит до
Java
1
 mEditText.setText(sbResEdit.toString());
после этого на экране долго ничего не изменяется, потом выдаёт результат.

P.S. Спасибо за подсказку про оптимизацию.
Паблито
не спать!
1794 / 1528 / 475
Регистрация: 12.05.2014
Сообщений: 5,574
Завершенные тесты: 1
23.11.2016, 17:37     EditText долго отображается #8
я бы не смотрел в отладчик, а сразу менял на BufferedInputStream

по-хорошему, файл вообще надо читать в отдельном потоке, и выводить только после считывания
UginL7
2 / 2 / 0
Регистрация: 18.08.2010
Сообщений: 22
Завершенные тесты: 1
23.11.2016, 17:41  [ТС]     EditText долго отображается #9
Так он на экран выводиться уже после того, как был полностью прочитан.... Сейчас передалаю на BufferedInputStream.
Alex_Fedor
16 / 16 / 2
Регистрация: 20.01.2015
Сообщений: 132
23.11.2016, 17:53     EditText долго отображается #10
Цитата Сообщение от UginL7 Посмотреть сообщение
файла большого размера (например 17Кб отображается примерно черзе 25 секунд, а 35Кб - через 3 минуты)
В перспективе стоит подобная задача. Буду делать так, считаю часть файла которое влазит в окошко и его отображать. Остальную работу по считыванию записи и тд. можно делать когда пользователь знакомые буквы вспоминает.
UginL7
2 / 2 / 0
Регистрация: 18.08.2010
Сообщений: 22
Завершенные тесты: 1
23.11.2016, 18:12  [ТС]     EditText долго отображается #11
Цитата Сообщение от Alex_Fedor Посмотреть сообщение
Остальную работу по считыванию записи и тд. можно делать когда пользователь знакомые буквы вспоминает.
Мне такое врядли подходит, т.к. у меня по сути это HEX-редактор.

Пределал на
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    File file = new File(fileName);
        InputStream is;
        BufferedInputStream bis;
        
        try {
            is = new FileInputStream(file);
            bis = new BufferedInputStream(is);
            int value;
            int bytesCounter = 0;
            StringBuilder sbText = new StringBuilder();
            StringBuilder sbResEdit = new StringBuilder();
            
            while(bis.available() != 0) {
                value = bis.read();
                
                if (!Character.isISOControl(value)) {
                    sbText.append((char) value);
                } else {
                    sbText.append(".");
                }
 
                if (bytesCounter == 7) {
                    sbResEdit.append(sbText).append("\n");
                    sbText.setLength(0);
                    bytesCounter = 0;
                } else {
                    bytesCounter++;
                }
                
            }
            
            if (bytesCounter != 0) {
                sbResEdit.append(sbText).append("\n");
            }
            is.close();
            bis.close();
            
            mHEXText.setText(sbResEdit.toString());
        } catch (IOException t) {
             Toast.makeText(getApplicationContext(),
                        "Exception: " + t.toString(), Toast.LENGTH_LONG).show();
        }
Паблито, Вы это имели ввиду?

На этом методе файлик размером 39*371 байт открывался 2 минута 15 секунд ((
Antohsa
8 / 12 / 0
Регистрация: 18.10.2016
Сообщений: 112
23.11.2016, 19:35     EditText долго отображается #12
Цитата Сообщение от UginL7 Посмотреть сообщение
после этого на экране долго ничего не изменяется, потом выдаёт результат.
Попробуйте все таки выводить кусками, как бы страницами, добавьте кнопки "вперед", "назад".... видимо в выводе проблема...

Если проблема решится, усложните - подгружайте текст по мере прокрутки...
Паблито
не спать!
1794 / 1528 / 475
Регистрация: 12.05.2014
Сообщений: 5,574
Завершенные тесты: 1
23.11.2016, 19:49     EditText долго отображается #13
на скорую руку проверил - файл 50 кб лежит в папке Downloads
грузится моментально
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;
 
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
 
public class MainActivity extends AppCompatActivity {
 
    private TextView textView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.textView);
        File filename = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + "/text.txt");
        String str = method(filename);
        textView.setText(str);
    }
 
 
 
    private String method(File file) {
        InputStream is;
        BufferedInputStream bis;
 
        try {
            is = new FileInputStream(file);
            bis = new BufferedInputStream(is);
            int value;
            int bytesCounter = 0;
            StringBuilder sbText = new StringBuilder();
            StringBuilder sbResEdit = new StringBuilder();
 
            while(bis.available() != 0) {
                value = bis.read();
 
                if (!Character.isISOControl(value)) {
                    sbText.append((char) value);
                } else {
                    sbText.append(".");
                }
 
                if (bytesCounter == 7) {
                    sbResEdit.append(sbText).append("\n");
                    sbText.setLength(0);
                    bytesCounter = 0;
                } else {
                    bytesCounter++;
                }
 
            }
 
            if (bytesCounter != 0) {
                sbResEdit.append(sbText).append("\n");
            }
            is.close();
            bis.close();
 
            return sbResEdit.toString();
 
        } catch (IOException t) {
            Toast.makeText(getApplicationContext(),
                    "Exception: " + t.toString(), Toast.LENGTH_LONG).show();
        }
        return "";
    }
}
UginL7
2 / 2 / 0
Регистрация: 18.08.2010
Сообщений: 22
Завершенные тесты: 1
24.11.2016, 14:02  [ТС]     EditText долго отображается #14
Спасибо! Это намного ускорило вывод на экран, но всё равно не моментально. Может ещё дело в том, что Вы выодите в TextView, а я использую EditText?! Попробую с ViewText, отпишусь!
Паблито
не спать!
1794 / 1528 / 475
Регистрация: 12.05.2014
Сообщений: 5,574
Завершенные тесты: 1
24.11.2016, 16:33     EditText долго отображается #15
использовать EditText для показа текста с огромным количеством строк - так себе задумка

если там все бьется переносами строк по 8 символов, я бы тогда все эти 8-ми символьные кусочки текста собрал в List<String> и показывал бы все это в RecyclerView в две колонки например:
TextView с текстом 8 символов и рядом с ним EditText с этим же текстом

поменяли в EditText - изменения отобразились в TextView
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2016, 20:59     EditText долго отображается
Еще ссылки по теме:

Android Смайлы и EditText
Валидация в EditText Android
Кастомный EditText Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
UginL7
2 / 2 / 0
Регистрация: 18.08.2010
Сообщений: 22
Завершенные тесты: 1
24.11.2016, 20:59  [ТС]     EditText долго отображается #16
Интересная задумка.... Я правильно понял, что в EditText выводить только то, что сейчас отображено на экране в TextView? Если да, то как понять какие строки сейчас на экран отображены?

Добавлено через 4 часа 14 минут
Днем не получилось отписаться... Таки да, если использовать TextView, то грузиться моментально. Проблема именно в EditText
Yandex
Объявления
24.11.2016, 20:59     EditText долго отображается
Ответ Создать тему
Опции темы

Текущее время: 17:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru