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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
DenisN03
0 / 0 / 0
Регистрация: 16.07.2016
Сообщений: 4
#1

Загрузка текста с сайта - Android

16.07.2016, 10:13. Просмотров 176. Ответов 7
Метки нет (Все метки)

Проблема такая - научился получать данные с сайта, но они в приходят в виде входного потока байт (InputStream). Как можно выделить только интересующие меня поля? То есть например на сайте есть поле с текстом и мне нужно вывести из всего потока только этот текст, остальные символы не нужны. Вот мой код:
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
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.os.AsyncTask;
import android.widget.Toast;
import android.widget.TextView;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
 
 
public class ProgressFragment extends Fragment {
 
TextView contentView;
String contentText = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_progress, container, false);
contentView = (TextView) view.findViewById(R.id.content);
if(contentText!=null)
contentView.setText(contentText);
return view;
}
 
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
 
if(contentText==null)
new ProgressTask().execute();
}
 
class ProgressTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... path) {
 
String content;
try{
 
content = getContent("http://jarlex.com/article/prostoj-sajt-na-primere");
}
catch (IOException ex){
content = ex.getMessage();
}
 
return content;
}
@Override
protected void onProgressUpdate(Void... items) {
}
@Override
protected void onPostExecute(String content) {
 
contentText=content;
contentView.setText(content);
Toast.makeText(getActivity(), "Данные загружены", Toast.LENGTH_SHORT)
.show();
}
 
private String getContent(String path) throws IOException {
BufferedReader reader=null;
try {
URL url=new URL(path);
HttpURLConnection c=(HttpURLConnection)url.openConnection();
c.setRequestMethod("GET");
c.setReadTimeout(10000);
c.connect();
reader= new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuilder buf=new StringBuilder();
String line=null;
 
while ((line=reader.readLine()) != null) {
buf.append(line + "\n");
}
return(buf.toString());
}
finally {
if (reader != null) {
reader.close();
}
}
}
}
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
16.07.2016, 10:22     Загрузка текста с сайта #2
Писать парсер. Который будет работать до первого же изменения автором сайта пары букв в нужном месте.
Паблито
2017 / 1759 / 548
Регистрация: 12.05.2014
Сообщений: 6,240
Завершенные тесты: 1
16.07.2016, 12:44     Загрузка текста с сайта #3
автор, читай про JSOUP и тогда не потребуется писать многоэтажные try-catch и собирать строки ручками
библиотека вытягивает страницу в две строки и парсит сразу в DOM Document
DenisN03
0 / 0 / 0
Регистрация: 16.07.2016
Сообщений: 4
16.07.2016, 13:48  [ТС]     Загрузка текста с сайта #4
Вот что получилось но приложение крашится при попытке загрузки данных, в ем я ошибся?
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
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
 
import java.io.IOException;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        final Button butTest = (Button)findViewById(R.id.button);
        final TextView tvInfo = (TextView)findViewById(R.id.text);
 
        butTest.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
 
                String string = null;
 
                try {
                    Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
                    Elements newsHeadlines = doc.select("#mp-itn b a");
                    string = newsHeadlines.toString();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                tvInfo.setText(string);
            }
 
        });
    }
}
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
16.07.2016, 13:50     Загрузка текста с сайта #5
Логи могли бы помочь
Паблито
2017 / 1759 / 548
Регистрация: 12.05.2014
Сообщений: 6,240
Завершенные тесты: 1
16.07.2016, 13:51     Загрузка текста с сайта #6
проверить разрешение на INTERNET в манифесте - раз
все операции с сетью проводятся в отдельном потоке - два

то есть все выносить в doInBackground
DenisN03
0 / 0 / 0
Регистрация: 16.07.2016
Сообщений: 4
16.07.2016, 13:52  [ТС]     Загрузка текста с сайта #7
Я новичек в программировании, могли бы Вы объяснить что такое логи или дать ссылку где можно про них прочитать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2016, 15:48     Загрузка текста с сайта
Еще ссылки по теме:

Android Загрузка изображения
Загрузка текста и картинки в listView с AsyncTask Android
Android Сохранение и загрузка
Android Выравнивание текста по ширине верхнего текста
Android Загрузка картинок в определенное место текста WebView

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

Или воспользуйтесь поиском по форуму:
Борис Верещагин
59 / 38 / 12
Регистрация: 14.01.2016
Сообщений: 183
Завершенные тесты: 4
16.07.2016, 15:48     Загрузка текста с сайта #8
DenisN03, логи это прежде всего logcat. есть такое окошко в ide
Yandex
Объявления
16.07.2016, 15:48     Загрузка текста с сайта
Ответ Создать тему
Опции темы

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