Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Старт активити из другого потока

Добрый вечер! У меня есть Активити, с кнопкой, по клику на которую стартует тред, из которого нужно запустить новые активити для отображения данных. При старте треда я передаю ему данные о запустившей его активити. В активити есть хэндлер, который принимает данные из потока и на их основе запускает активи. Всё бы ничего, но если дёргать метод из потока, то приложение просто вылетает, а если запуск активити запросить сразу в активити по клику кнопки - всё работает.
Из потока вызывается метод startBrowser. Просто вызывается. Представленный ниже код находится в мэйнАктивити
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public void startBrowser(String html)
    {
        Bundle b = new Bundle();
        Message m = new Message();
        b.putString("html",html);
        m.setData(b);
        handler.sendMessage(m);
    }
    Handler handler =  new Handler()
    {
        @Override
        public void handleMessage(Message msg) {
            Intent intent = new Intent(MainActivity.this,webview.class);
            intent.putExtra("html",msg.getData().getString("html"));
            startActivity(intent);
        }
    };
Ответ:
Сообщение от danyasworld
Разве есть ограничения на размер текста?
Есть, но гораздо больше 8 Кб (или 8 тысяч строк непонятной длины).
Вопрос: Сохранение данные при переходе на другой активити

Доброго времени суток, уважаемые!
Вопрос заезжан и много инфы в инете, но прочитав и попробовав наткнулся на пару стен, соответственно полез на форум, может быть вы меня ткнете в мои ошибки!
Итак - имеем 2 активити и общее меню, при клике в меню для перехода на новую активити срабатывает метод создания активити - код приведу ниже, соответственно на новой ативити есть пункт меню для перехода на 1ю активити - там так же вызывается метод создания новой активити.
Теперь моя проблема и код.

1я активити содержит меню, метод сохранения данных и тд.
Java(TM) 2 Platform Standard Edition 5.0
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
package com.example.SmartHome;
 
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
 
public class MainActivity extends Activity {
 
    EditText ePhone;
    SharedPreferences mSharedPref;
    CheckBox chbOne, chbTwo, chbThree, chbFour;
 
    private final String PHONEPERF = "Saved phone number";
    private String KEY_CHB_RELAY_ONE = "false";
    private String KEY_CHB_RELAY_TWO = "false";
    private final  String KEY_CHB_RELAY_THREE = "false";
    private final  String KEY_CHB_RELAY_FOUR = "false";
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        FindViews(); //Нахожу View
        LoadPerf(); //Загружаю сохраненный номер из настроек приложения
        onLoadInstanceState(savedInstanceState); //Загружаю сохраненные данные при переходе обратно
       }
 
    protected void FindViews()
    {
        ePhone = (EditText) findViewById(R.id.ePhoneNum);
        chbOne = (CheckBox) findViewById(R.id.chbRelayOne);
        chbTwo = (CheckBox) findViewById(R.id.chbRelayTwo);
        chbThree = (CheckBox) findViewById(R.id.chbRelayThree);
        chbFour = (CheckBox) findViewById(R.id.chbRelayFour);
    }
 
    @Override
    protected void onSaveInstanceState(Bundle savedInstanceState)
    {
        if (chbOne.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_ONE, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_ONE, "false");
 
        if (chbTwo.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_TWO, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_TWO, "false");
 
        if (chbThree.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_THREE, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_THREE, "false");
 
        if (chbFour.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_FOUR, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_FOUR, "false");
 
        super.onSaveInstanceState(savedInstanceState);
    }
 
 
   // @Override
    protected void onLoadInstanceState(Bundle savedInstanceState)
    {
        if (savedInstanceState != null)
        {
            if (savedInstanceState.getString(KEY_CHB_RELAY_ONE) == "true")
                chbOne.setChecked(true);
            else chbOne.setChecked(false);
 
            if (savedInstanceState.getString(KEY_CHB_RELAY_TWO) == "true")
                chbTwo.setChecked(true);
            else chbTwo.setChecked(false);
 
            if (savedInstanceState.getString(KEY_CHB_RELAY_THREE) == "true")
                chbThree.setChecked(true);
            else chbThree.setChecked(false);
 
            if (savedInstanceState.getString(KEY_CHB_RELAY_FOUR) == "true")
                chbFour.setChecked(true);
            else chbFour.setChecked(false);
        }
    }
 
    //создаем меню
    @Override
    public boolean onCreateOptionsMenu(Menu currMenu) {
        super.onCreateOptionsMenu(currMenu);
 
        //заполняем меню
        getMenuInflater().inflate(R.menu.menu_main, currMenu);
        if (currMenu != null)
            currMenu.findItem(R.id.main_inf).setVisible(false);
        return true;
    }
 
    //событие на выбранный пункт меню
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // получаем все пункты меню
        //пункт item определен в menu_main
        int itemId = item.getItemId();
        Intent intent;
 
        // ищем наш пункт меню
        switch (itemId) {
            case R.id.about:
                intent = new Intent(MainActivity.this, AboutActivity.class);
                startActivity(intent);
                return true;
            case R.id.conf:
                intent = new Intent(MainActivity.this, SettingsActivity.class);
                startActivity(intent);
                return true;
            case R.id.names:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
 
    public void ButtonClick(View view)
    {
        String strPhone = "";
        if (ePhone.getText().length() != 0)
            strPhone = ePhone.getText().toString();
        switch(view.getId())
        {
            case  R.id.bUpd:
            {
                break;
            }
            case  R.id.ibSavePerf:
            {
                SavePerf(view, strPhone);
                break;
            }
        }
    }
 
    //Обрабатываем нажатие кнопки "Сохранить":
    public void SavePerf(View view, String str) {
 
        //Создаем экземпляр для хранения данных SharedPreferences, выставляем доступ MODE_PRIVATE:
        mSharedPref = getPreferences(MODE_PRIVATE);
 
        //Создаем объект Editor для создания пар имя-значение:
        SharedPreferences.Editor mEditor = mSharedPref.edit();
 
        //Сохраняем введенные символы в поля ввода, задавая имена USERNAME,
        //PASSWORD и соответствующие им значения, получаемые из полей ввода:
        mEditor.putString(PHONEPERF, str);
 
        //Совершаем сохранение того, что мы тут наворотили:
        mEditor.commit();
 
        //Показываем Toast сообщение о том, что дело сделано:
        Toast.makeText(this, "Номер сохранен!", Toast.LENGTH_SHORT).show();
    }
 
    //Загрузить сохраненный номер из настроек приложения
    public void LoadPerf() {
 
        //Используем созданный файл данных SharedPreferences:
        mSharedPref = getPreferences(MODE_PRIVATE);
 
        //Создаем строковый объект, берем значение из сохраненных данных:
        String savedNumb = mSharedPref.getString(PHONEPERF, "");
        if (savedNumb == "")
        {
            ePhone.setText("");
            ePhone.setHint("Введите номер");
        }
 
        //Присваиваем вытащенные значения полям ввода:
        ePhone.setText(savedNumb);
 
        //Показываем Toast сообщение о том, что дело сделано:
        Toast.makeText(this, "Данные загружены", Toast.LENGTH_SHORT).show();
    }
}
Возникло 2 проблемы - в отладчике когда я жму на кнопку перехода на 2 экран у меня осуществляется переход сюда

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    @Override
    protected void onSaveInstanceState(Bundle savedInstanceState)
    {
        if (chbOne.isChecked())
            savedInstanceState.putString("KEY_CHB_RELAY_ONE", "true");
        else savedInstanceState.putString("KEY_CHB_RELAY_ONE", "false");
 
        if (chbTwo.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_TWO, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_TWO, "false");
 
        if (chbThree.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_THREE, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_THREE, "false");
 
        if (chbFour.isChecked())
            savedInstanceState.putString(KEY_CHB_RELAY_FOUR, "true");
        else savedInstanceState.putString(KEY_CHB_RELAY_FOUR, "false");
 
        super.onSaveInstanceState(savedInstanceState);
    }
соответственно у меня выбран чекбокс 1, но при том, что он выбран не отрабатывает

Java(TM) 2 Platform Standard Edition 5.0
1
savedInstanceState.putString("KEY_CHB_RELAY_ONE", "true");
не пойму почему, но отладчик показывает KEY_CHB_RELAY_ONE = "false" переменная не переписывается
Это первое
Далее если же я меняю эту строку на

Java(TM) 2 Platform Standard Edition 5.0
1
savedInstanceState.putString("aaa", "true");
то в "aaa" записывается true и условие якобы отрабатывает
Дальше я перескакиваю на вторую активити, где так же есть меню с пунктом для первого активити и обработкой нажатий на пункты меню

Java(TM) 2 Platform Standard Edition 5.0
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
package com.example.SmartHome;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
 
public class AboutActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_about);
    }
 
    //создаем меню
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        super.onCreateOptionsMenu(menu);
        //заполняем меню
        getMenuInflater().inflate(R.menu.menu_main, menu);
        if (menu != null)
            menu.findItem(R.id.about).setVisible(false);
        return true;
    }
 
    //событие на выбранный пункт меню
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // получаем все пункты меню
        //пункт item определен в menu_main
        int itemId = item.getItemId();
        Intent intent;
 
        // ищем наш пункт меню
        switch (itemId)
        {
            case R.id.conf:
                intent = new Intent(AboutActivity.this, SettingsActivity.class);
                startActivity(intent);
                return true;
            case R.id.names:
 
                return true;
            case R.id.main_inf:
                intent = new Intent(AboutActivity.this, MainActivity.class);
                startActivity(intent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
Соответственно когда я тыкаю для возврата на первую активити у меня происходит его пересоздание - поле текстовое заполняется из настроек все норм, отладчик дальше идет в загрузку

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   // @Override
    protected void onLoadInstanceState(Bundle savedInstanceState)
    {
        if (savedInstanceState != null)
        {
            if (savedInstanceState.getString(KEY_CHB_RELAY_ONE) == "true")
                chbOne.setChecked(true);
            else chbOne.setChecked(false);
 
            if (savedInstanceState.getString(KEY_CHB_RELAY_TWO) == "true")
                chbTwo.setChecked(true);
            else chbTwo.setChecked(false);
 
            if (savedInstanceState.getString(KEY_CHB_RELAY_THREE) == "true")
                chbThree.setChecked(true);
            else chbThree.setChecked(false);
 
            if (savedInstanceState.getString(KEY_CHB_RELAY_FOUR) == "true")
                chbFour.setChecked(true);
            else chbFour.setChecked(false);
        }
    }
и тут я вижу что savedInstanceState = null
Либо при создании из второй активити оно обнуляется, но должно же сохраняться судя по урокам у всех все работает, например отсюда

там так же создается активити новое но при возврате savedInstanceState != null
Соответственно мой выбранный чекбокс не восстанавливается

Какие есть предположения куда копать что не правильно?
Ответ:
Сообщение от KorPaEv
как повешать функцию на событие закрытия приложения?
я ж говорю - в onPause() можно все сохранять
Вопрос: Открыть картинку в новом активити

Приветствую уважаемые разрабы. Сразу извиняюсь если написал не в той ветке. Задача такая : есть 2 бланка активити : на первом несколько текствью и один имеджвью. При нажатии на текст появляется картинка:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        View.OnClickListener SelectPic = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
 
                switch (v.getId())
                {
                    case R.id.textView7 :
                        mImageView.setImageResource(R.drawable.qwert01);
                        break;
 
                    case R.id.textView8 :
                        mImageView.setImageResource(R.drawable.qwert02);
                        break;
 
                    case R.id.textView9 :
                        mImageView.setImageResource(R.drawable.qwert03);
                        break;
               }
 
            }
        };
А при нажатии на саму картинку открывается второй активити, на котором из элементов только имаджвью, но на весь экран.
Java
1
2
3
4
5
6
7
8
9
       final View.OnClickListener Full = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, FullScreen.class);
 
                startActivity(intent);
 
            }
        };
Сейчас у меня просто открывается пустой экран, ресурс для имаджвью не указан. Вопрос : как сделать что бы при нажатии на картинку она открывалась на втором активити в полный экран? Спасибо!
Ответ: Kir-malishev, с каких пор передача битмапа в активити через intent - это хорошая практика?
Sergei12, вам в следующую активити нужно передавать не битмап, а ссылку на битмап. они же у вас статичные.

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
        View.OnClickListener SelectPic = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
                Intent intent = new Intent(this, NewActivity.class);
                int resource = 0;
 
                switch (v.getId())
                {
                    case R.id.textView7 :
                        mImageView.setImageResource(R.drawable.qwert01);
                        resource = R.drawable.qwert01;
                        break;
 
                    case R.id.textView8 :
                        mImageView.setImageResource(R.drawable.qwert02);
                        resource = R.drawable.qwert02;
                        break;
                    case R.id.textView9 :
                        mImageView.setImageResource(R.drawable.qwert03);
                        resource = R.drawable.qwert03;
                        break;
 
                }
                intent.putExtra("image", resource);
                startActivity(intent);
 
            }
А в следующем активити уже вытягивать id вашего ресурса и использовать.
Вопрос: Как красиво закрывать приложение?

Здравствуйте!
Столкнулся с проблемой: если я закрываю своё приложение при помощи диалогового окна, то выглядит это очень некрасиво. Это связано с тем, что при нажатии кнопки "Да" в диалоговом окне, оно не пропадает, а как-то некрасиво блекнет, а потом просто закрывается все активити приложения вместе с окном. Не пойму, как сделать, чтоб сначала пропадало диалоговое окно, а затем закрывалось активити?
Спасибо!

Добавлено через 21 минуту
Я нашёл выход
Java(TM) 2 Platform Standard Edition 5.0
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
 public void onBackPressed() {
        if (!isEntered) {
            super.onBackPressed();
        } else {
            dialog = new AlertDialog.Builder(this)
                    .setNegativeButton(R.string.no, null)
                    .setTitle(R.string.exitFromProg)
                    .setMessage(R.string.areYouShure)
                    .setPositiveButton(R.string.yes,
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                                    int which) {
                                    Thread my = new Thread(new Runnable() {
                                        @Override
                                        public void run() {
                                            h.sendEmptyMessage(1);
                                        }
                                    });
                                    my.start();
                                    Thread my1 = new Thread(new Runnable() {
                                        @Override
                                        public void run() {
                                            try {
                                                Thread.sleep(100);
                                            } catch (InterruptedException e) {
                                                e.printStackTrace();
                                            }
                                            db.close();
                                            isEntered = false;
                                            Start.super.onBackPressed();
                                        }
                                    });
                                    my1.start();
                                }
                            }).create();
В обработке Handler:
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
h = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                Log.d(LOG_TAG, "inside handler");
                dialog.dismiss();
            }
        };
Однако, чувствую, что это костыль.
Ответ: Ханасака,
да по идее можно и просто так:

Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        finish();
                    }
                }, 300);
            }
        })
Вопрос: Исключить активити из списка последних закрытых приложений

Доброго времени суток форумчане!
Делаю приложения, и у меня стоит задача нужно открывать активити з brodcast receiver и после того как она станет не нужна закрыть её, и тут проблема. Если приложения не было запущенное то при закрытие активити приложения закрывается, и вроде бы хорошо если б к нему нельзя было вернуться через список последних закрытых приложений. Можна ли этого избежать?
Ответ: Вы не можете своим приложении влиять на работу системы. Изменяйте работу приложения.
Вопрос: Приложение выдает ошибку, если на устройстве отключен GPS

Приложение определяет координаты, затем по координатам определяет город. Но, если на устройстве отключить GPS приложение вылетает. Как правильно составить листинг, чтобы, если GPS на устройстве выключен, то приложение не вылетало, а просто запускалась активность без определения города.

Вот листинг:

Код Java(TM) 2 Platform Standard Edition 5.0
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
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
       
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_COARSE);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        String provider = mLocationManager.getBestProvider(criteria, true);
 
            mLocation = mLocationManager.getLastKnownLocation(provider);
            showCurrentLocation(mLocation);
 
            Geocoder geocoder = new Geocoder(this, Locale.getDefault());
 
            try {
                List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
 
                if (addresses != null) {
                    Address returnedAddress = addresses.get(0);
                    String city = returnedAddress.getAddressLine(1);
 
                    mCityEditText.setText(city);
                }
 
            } catch (IOException e) {                              
                e.printStackTrace();
            }
 
protected void showCurrentLocation(Location location) {
        if (location != null) {
            lat = location.getLatitude();
            lng = location.getLongitude();
        }
    }
Кстати, без нижеуказанного участка кода, приложение не вылетает, но и город, к сожалению, не определяет.

Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
try {
                List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
 
                if (addresses != null) {
                    Address returnedAddress = addresses.get(0);
                    String city = returnedAddress.getAddressLine(1);
 
                    mCityEditText.setText(city);
                }
 
            } catch (IOException e) {                
                e.printStackTrace();
            }
Ответ: А как это в листинге прописать?

Добавлено через 15 минут
Сделал такую проверку. Когда на устройстве координаты определяются только по GPS (без wi-fi и сетей), то приложение получает координаты 0.0. Наверное поэтому и вылетает. Но вот как это исправить?
Вопрос: Второй активити

Не могу ни где найти статьи, где есть пример с работой 2-х и более активити в android studio.
Если кто то встречал, скиньте буду очень благодарен.
Просто хочу понять принцип.
Заранее спасибо
Ответ: Воо спасибо)
Вопрос: Вылетает приложение во время просмотра журнала (retrofit2)

Добрый вечер.

Есть список журналов, и просмотр журнала использую библиотеку (retrofit2 для получения данных).

Так вот когда я несколько раз просматриваю журналы просто вылетает приложение.

Вот Log ошибок.

XML
1
2
3
4
5
6
7
8
9
07-31 17:32:37.058 18893-18893/com.project.jurnal.example E/ApkAssets: Error while loading asset assets/natives_blob_64.bin: java.io.FileNotFoundException: assets/natives_blob_64.bin
07-31 17:32:37.058 18893-18893/com.project.jurnal.example E/ApkAssets: Error while loading asset assets/snapshot_blob_64.bin: java.io.FileNotFoundException: assets/snapshot_blob_64.bin
07-31 17:32:38.442 18893-20870/com.project.jurnal.example E/libEGL: validate_display:255 error 3008 (EGL_BAD_DISPLAY)
07-31 17:34:07.925 18893-18900/com.project.jurnal.example A/art: art/compiler/dex/mir_method_info.cc:104] Check failed: invoke_type == kVirtual (invoke_type=direct, kVirtual=virtual) 
07-31 17:34:19.772 18893-18900/com.project.jurnal.example E/art: Unexpected time out during dump checkpoint.
07-31 17:34:19.772 18893-18900/com.project.jurnal.example A/art: art/runtime/barrier.cc:90] Check failed: count_ == 0 (count_=-1, 0=0) Attempted to destroy barrier with non zero count
07-31 17:34:19.772 18893-18900/com.project.jurnal.example A/art: art/runtime/runtime.cc:366] Runtime aborting --- recursively, so no thread-specific detail!
07-31 17:34:19.772 18893-18900/com.project.jurnal.example A/art: art/runtime/runtime.cc:366] 
07-31 17:34:20.018 18893-18900/com.project.jurnal.example A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 18900 (Jit thread pool)
Ответ:
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
public class ScrollingActivity extends AppCompatActivity
{
    private ItemsIdAdapter adapter;
    JSONArray listJSON = null;
    private LinearLayoutCompat NewsView;
    private static final String TAG = ItemsNews.class.getSimpleName();
 
    String item_id;
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scrolling);
 
        Intent i = getIntent();
        item_id = i.getStringExtra("id");
 
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar1);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("");
 
 
        ItemsView();
    }
 
    String item_name,item_text,item_photo,item_date, item_video,item_link;
 
    TextView   ViewsTitle;
    WebView    ViewsText;
    ImageView  ViewsImage;
    TextView   ViewsDate;
 
    public void ItemsView()
    {
        ApiInterface apiService =
                ApiClient.getClient().create(ApiInterface.class);
 
        retrofit2.Call<NewsDetailResponse> call = apiService.getNewsDetails(Integer.parseInt(item_id), AndroidUtilities.ApiKey);
 
    
        call.enqueue(new retrofit2.Callback<NewsDetailResponse>()
        {
 
            @Override
            public void onResponse(Call<NewsDetailResponse> call, retrofit2.Response<NewsDetailResponse> response) {
                int statusCode = response.code();
                List<NewsDetailModel> news = response.body().getResults();
 
                ViewsTitle   = (TextView)   findViewById(R.id.content_title);
 
                ViewsText = (WebView) findViewById(R.id.content_text);
                ViewsImage = (ImageView) findViewById(R.id.image_item);
                ViewsDate   = (TextView)   findViewById(R.id.datetime);
 
                ViewsTitle.setText(news.get(0).getTitle());
                ViewsDate.setText(news.get(0).getRelease_date());
 
                NCLBigCache.INSTANCE.getNCLBigCache(ScrollingActivity.this)
                        .load(news.get(0).getPoster_path())
                        .into(ViewsImage);
 
                item_link = news.get(0).getLink();
                item_video = news.get(0).getVideo();
                
                CollapsingToolbarLayout collapsingToolbar =
                        (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
                getSupportActionBar().setTitle(news.get(0).getTitle());
 
 
                WebSettings webSettings = ViewsText.getSettings();
                ViewsText.setFocusable(true);
 
                ViewsText.setOnTouchListener(new View.OnTouchListener()
                {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        return (event.getAction() == MotionEvent.ACTION_MOVE);
                    }
                });
 
                // Add a WebViewClient
                ViewsText.setWebViewClient(new WebViewClient()
                {
                    public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,
                                                         WebStorage.QuotaUpdater quotaUpdater)
                    {
                        quotaUpdater.updateQuota(spaceNeeded * 2);
                    }
                });
 
 
                ViewsText.setVerticalScrollBarEnabled(false);
                ViewsText.getSettings().setJavaScriptEnabled(true);
                ViewsText.setHorizontalScrollBarEnabled(false);
                ViewsText.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath());
                ViewsText.getSettings().setDomStorageEnabled(true);
                ViewsText.getSettings().setAllowFileAccess(true);
                ViewsText.getSettings().setAppCacheEnabled(true);
                ViewsText.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
                ViewsText.setWebViewClient(new WebViewClient()
                {
                });
 
 
                StringBuilder sb = new StringBuilder();
                sb.append(news.get(0).getText());
                ViewsText.loadDataWithBaseURL("file:///android_asset/", sb.toString(), "text/html", "utf-8", null);
 
//                TextView  content_title = (TextView) findViewById(R.id.content_title);
            }
 
            @Override
            public void onFailure(Call<NewsDetailResponse> call, Throwable t) {
 
            }
        });
 
    }
}
Вот код просмотра, я же говорю, просматриваешь 5-6 журналов, программа вылетает, лог я выше писал незнаю почему так.
Вопрос: Рендеринг активити перед запуском

Доброго времени суток.
Есть две активити, вторая открывается по кнопке из первой.
Во второй активити происходит загрузка данных некоторое время, после чего она начинает отображаться, в связи с чем при открытии возникает лаг.

Можно ли как-то сделать пре-рендеринг второй активити (при запуске первой), чтобы при нажатии на кнопку она открывалась сразу?
Ответ: Да, спасибо, подумал немного и сам к этому же пришел
Вопрос: Разметка приложения, контейнеры компоновки

Здравствуйте , уважаемые программисты. У меня есть небольшой вопросик. Буквально на днях начал изучать платформу Android. Но , столкнулся с некой проблемой. Мне надо создать приложение следующего характера:

1) Есть список элементов пример : картинка_текст. Элементов будет около 100 штук , и мне естественно надо , чтобы этот список пролистывался.

2) При выборе элемента будет вызывать или новое активити , или просто окно , в этом же активити.

Следовательно вопросы:

1) Какой контейнер компоновки использовать.

2) Как реализовать что-то вроде всплывающего окна в данном активити.

P.S. Заранее прошу прощения, за возможную неоднозначность и неточность в этом посте. Я новичок в Android-разработке. Заранее благодарен за помощь.
Ответ: Большое спасибо