Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
4udo_Prirodi
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 4
1

Некорректное отображение текста при парсинге

16.06.2017, 12:58. Просмотров 275. Ответов 3
Метки нет (Все метки)

Здравствуйте!
Друзья! Сразу оговорюсь, я новичок и в программировании, и на Вашем форуме. Поэтому заранее прошу понять и простить .
А теперь собссно вопрос.
Не без помощи уроков из ваших интернетов пытаюсь написать программку в Android Studio. И столкнулся с проблемой. Сначала приведу код, а потом опишу проблему.
Вот MainActivity
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
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
 
public class MainActivity extends AppCompatActivity {
 
    private ListView listView;
    private TextView textView;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        listView = (ListView) findViewById(R.id.listView);
        textView = (TextView) findViewById(R.id.textView);
 
        ParseTitle parseTitle = new ParseTitle();
        parseTitle.execute();
 
        try {
            final HashMap<String, String> hashMap = parseTitle.get();
            final ArrayList<String> arrayList = new ArrayList<>();
            for (Map.Entry entry : hashMap.entrySet()){
                arrayList.add(entry.getKey().toString());
            }
            ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(MainActivity.this,
                    android.R.layout.simple_list_item_1, arrayList);
            listView.setAdapter(arrayAdapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener (){
 
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    ParseText parseText = new ParseText();
                    parseText.execute(hashMap.get(arrayList.get(position)));
 
                    try {
                        listView.setVisibility(View.GONE);
                        textView.setText(parseText.get());
                        textView.setVisibility(View.VISIBLE);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (ExecutionException e) {
                        e.printStackTrace();
                    }
                }
            }  );
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
      @Override
      public void onBackPressed() {
          listView.setVisibility(View.VISIBLE);
          textView.setVisibility(View.GONE);
 
    }
    class ParseTitle extends AsyncTask<Void,Void, LinkedHashMap<String, String>>{
 
        @Override
        protected LinkedHashMap<String, String> doInBackground(Void... params) {
            LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
 
            try {
                Document document = Jsoup.connect("http://bymyeyes.ru/publ/vzglyadi/1").get();
                Elements elements = document.select(".eTitle");
                for (Element element : elements) {
                    Element element1 = element.select("a[href]").first();
                    linkedHashMap.put(element.text(), element1.attr("abs:href"));
                }
            } catch (IOException e){
                e.printStackTrace();
            }
            return linkedHashMap;
        }
    }
    class ParseText extends AsyncTask<String, Void, String>{
 
        @Override
        protected String doInBackground(String... params) {
            String str = "  ";
 
            try {
                Document document = Jsoup.connect(params[0]).get();
                Element element = document.select(".eText").first();
                str = element.text();
            } catch (IOException e) {
                e.printStackTrace();
            }
 
            return str;
        }
    }
}
А вот main.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="ru.bymyeyes.parsing.MainActivity">
 
 
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>
Суть в том, что в ListView открывается список заголовков статей и при нажатии на заголовок открывается статья. Это всё работает. Но при отображении два косяка:
1. Статья отображается только фиксировано по размеру экрана (грубо говоря всего четверть текста). И никакой прокрутки вниз/вверх нет.
2. Статья отображается сплошным текстом - без абзацев и форматирования текста.

Мои соображения по первой проблеме:
- нужно использовать не RelativeLayout, а какой-то другой (вот какой, я не знаю. метод подбора пока не помог)
- нужно использовать вообще новый layout. Чтобы статья открывалась в новом активити.
Мои соображения по второй проблеме:
- Т.к. сайт от Ucoz, то нужно ковыряться в PHP и настраивать API (хотя конечно хотелось бы без этого)
- как-то что-то добавить в код.

Помогите, кто чем может. Или пошлите туда, где всё это популярно объясняется.
Заранее спасибо за понимание. и помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2017, 12:58
Ответы с готовыми решениями:

Некорректное отображение содержания
Добрый вечер. У меня такая проблема: когда Упорядочить элементы в конструкторе все прекрасно...

Android 4.1.1 некорректное отображение кириллицы
Добрый вечер всем. Загружаю текст из базы данных в компонент webView, при загрузке получаю...

Некорректное отображение приложения в Graphic Layout и на телефоне
Должно быть : Добавлено через 9 минут На эмуляторе все корректно отбражается на телефоне...

Ошибка при парсинге страницы сайта
В методе онклик пишу: public void onClick(View v) { Document doc = null; try...

Ошибка при парсинге или как лучше сделать?
Ребята помогите пожалуйста. В папке assets у меня 7 txt. файлов.7 вопросов. По нажатию на...

3
4udo_Prirodi
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 4
19.06.2017, 13:26  [ТС] 2
Блин... Неужели никаких идей ни у кого?
0
Pablito
2812 / 2236 / 754
Регистрация: 12.05.2014
Сообщений: 7,821
Завершенные тесты: 1
19.06.2017, 13:49 3
идей полно, просто писать надо будет много и нудно
глядя на эти вложенные асинктаски и отображение кучи текста, из которого вырезали все форматирование, в обычный текствью - объяснять ничего не хочется

parseText.get() и parseTitle.get() блокируют основной поток, так делать не комильфо, асинктаск сам должен что-то вызвать когда будет результат
асинктаски сделать бы отдельными классами и вынести их из активити
0
4udo_Prirodi
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 4
20.06.2017, 16:52  [ТС] 4
Не совсем понятно...
Буду грызть гранит дальше
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2017, 16:52

Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup
Есть вот такой код для загрузки и парсинга сайтов. Если сюда скормить левый адрес для загрузки или...

Некорректное отображение текста (или текста вообще нет) в браузерах
Здравствуйте, проблема такая: некорректно отображаются текст и ссылки в браузерах Google Chrome и...

Некорректное отображение текста
при получении с формы текста он сохраняется в БД и там он выглядит как положено пример: текст1...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru