Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Загрузка текста с сайта / 5 сообщений из 5, страница 1 из 1
16.07.2016, 09:53
    #39275056
DenisN03
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка текста с сайта
Проблема такая - научился получать данные с сайта, но они в приходят в виде входного потока байт (InputStream). Как можно выделить только интересующие меня поля? То есть например на сайте есть поле с текстом и мне нужно вывести из всего потока только этот текст, остальные символы не нужны. Вот мой код:
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();
}
}
}
}

}
...
Рейтинг: 0 / 0
16.07.2016, 10:30
    #39275059
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка текста с сайта
DenisN03, java html parser
https://jsoup.org/ и тд
...
Рейтинг: 0 / 0
16.07.2016, 10:34
    #39275061
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка текста с сайта
...
Рейтинг: 0 / 0
16.07.2016, 13:46
    #39275089
DenisN03
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка текста с сайта
Где-то в степи, вот что получилось, но приложение крашится когда пытаюсь получить данные. В чем я ошибся?
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);
}

});
}
}
...
Рейтинг: 0 / 0
16.07.2016, 18:32
    #39275129
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Загрузка текста с сайта
DenisN03,
вообще то надо задавать такие вещи на андроид форуме, пользоваться тегами форматирования текста

1 качаем библиотеку
в bild.gradle app в секцию dependencies добавляем новую compile 'org.jsoup:jsoup:1.9.2'
2 добавляем разрешения в манифест
<uses-permission android:name="android.permission.INTERNET" />
ну и сам код

Код: 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.
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    TextView mMyText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMyText= (TextView) findViewById(R.id.my_text);
        new GetJsonAsync().execute("http://en.wikipedia.org/","#mp-itn b a");

    }
    private class GetJsonAsync extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... params){
            Document  doc = null;
            try {
                doc =  Jsoup.parse(new URL(params[0]),10_000);
            } catch (IOException e) {
                e.printStackTrace();
            }
            Elements newsHeadlines = doc.select(params[1]);
            return String.valueOf(newsHeadlines.get(0));
        }

        @Override
        protected void onPostExecute(String result) {
            mMyText.setText(result);
        }
    }
}


...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Загрузка текста с сайта / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]