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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
MRabaev
7 / 7 / 1
Регистрация: 27.09.2014
Сообщений: 43
#1

Android.os.networkonmainthreadexception - Программирование Android

21.03.2015, 00:37. Просмотров 2171. Ответов 6
Метки нет (Все метки)

Суть дела:
Написал методы для того, чтобы отпарсить xml по url. Вроде бы все ок, но выскакивает ошибка android.os.networkonmainthreadexception Как ее пофиксить?
Читал про onPreExecute(), но не понял, как его реализовать.

Подскажите, кто решал уже такие проблемы.

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
package com.rabaev.xmlpullparser.app;
 
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
 
 
public class MainActivity extends ActionBarActivity {
 
    ListView ecbList;
    TextView messageText;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        ecbList = (ListView) findViewById(R.id.ecbListView);
        messageText = (TextView)findViewById(R.id.messageText);
 
        ecbList.setAdapter(getAdapter());
 
    }
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
    public ArrayAdapter<String> getAdapter(){
        ArrayList<String> list = new ArrayList<String>();
 
        try{
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser parser = factory.newPullParser();
            parser.setInput(new InputStreamReader(getUrlData("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml")));
            while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
 
                if (parser.getEventType() == XmlPullParser.START_TAG
                        && parser.getName().equals("Cube")) {
                    list.add(parser.getAttributeValue(0) + " = "
                            + parser.getAttributeValue(1) + "\n");
                }
 
                parser.next();
            }
 
        }catch (Throwable exc){
            ecbList = null;
            messageText.setText(exc.toString());
        }
 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, list);
 
        return  adapter;
    }
 
    public InputStream getUrlData(String urlString)throws URISyntaxException, IOException {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpPost method = new HttpPost(String.valueOf(new URL(urlString)));
        HttpResponse res = client.execute(method);
        return res.getEntity().getContent();
    }
 
 
}
Manifest
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.rabaev.xmlpullparser.app" >
 
    <uses-permission android:name="android.permission.INTERNET"/>
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2015, 00:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Android.os.networkonmainthreadexception (Программирование Android):

Android.os.NetworkOnMainThreadException при создании сокета - Программирование Android
Доброго времени суток товарищи. Возникла очень серьезная проблемма. Решил я сделать сетевой чат. Ну все вроде норм. Сервер и клиент...

Ошибка NetworkOnMainThreadException - Программирование Android
Всем привет, делаю приложку по примерам. В качестве БД используется MySQL. Никак не пойму в чем ошибка. Скорее всего в JSONParser, так как...

Исключение NetworkOnMainThreadException - Программирование Android
response.body().string() библиотеки okHttp выдает исключение NetworkOnMainThreadException если это сделать в UI потоке, но почему? Ведь я...

NetworkOnMainThreadException при сохранении картинки в битовый массив - Программирование Android
Беру данные с веб сайта как JSON и созраняю в базу данных sqlite. Собираюсь созранять картинку как byte, но при методе, который из URL на...

Откуда берутся атрибуты android:layout_width и android:layout_height в элементе LinearLayout? - Программирование Android
Недавно начал изучать Android API, а сегодня более менее разобрал основы синтакиса XML. Затем стал разбирать следующий пример: ...

Android studio, как запускать программу сразу на android смартфоне подключенному к usb? - Программирование Android
android studio, как запускать программу сразу на android смартфоне подключенному к usb?

6
Levabala
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 18
27.06.2015, 15:41 #2
Ошибка происходит при getInputStream(). В официальной документации что-то говорится про запрет на запросы в основном потоке, но я пока не понял, что это значит
0
Pablito
2505 / 1989 / 619
Регистрация: 12.05.2014
Сообщений: 6,942
Завершенные тесты: 1
27.06.2015, 16:56 #3
это значит что все телодвижения с сетью нужно делать в отдельном потоке
на форуме много раз обсуждалось, для этого есть чудесный класс AsyncTask, про него на форуме есть много тем
1
MRabaev
7 / 7 / 1
Регистрация: 27.09.2014
Сообщений: 43
28.06.2015, 12:28  [ТС] #4
Да, уже давно разобрался))
Спасибо большое)
0
Levabala
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 18
28.06.2015, 12:30 #5
А я так и не смог осилить HttpURLConnection
Плюнул на всё - делаю запросы через WebView
0
MRabaev
7 / 7 / 1
Регистрация: 27.09.2014
Сообщений: 43
28.06.2015, 12:33  [ТС] #6
Посмотри вот тут.
Я там получаю JSON для парсинга.
Будут вопросы - пиши сюда

https://github.com/mrabaev48/DictionaryVer1/tree/master/Dictionary
0
Levabala
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 18
28.06.2015, 12:37 #7
Спасибо, посмотрю)
0
28.06.2015, 12:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2015, 12:37
Привет! Вот еще темы с ответами:

Ошибка: Caused by Android java.lang.ClassCastException: android.app.Application cannot be cast - Программирование Android
Здравствуйте. Очень нужен ваш совет. При запуске приложения появляется ошибка: Caused by: java.lang.ClassCastException:...

Android NDK. Как пользоваться? Когда стоит использовать его вместо Android SDK? - Программирование Android
Можно ли писать в нем готовые приложения Android?

Как приложение Android написать на С++ в Android NDK, чтоб получить *.apk? Нужен мануал - Программирование Android
Уже не в первый раз задаю вопрос. Молчание. В лучшем случае - &quot;RTFM&quot; и точка. Так вот, официального мануала, где есть ответ на...

Android.support.v4.app.FragmentActivity не работает в Android Studio - Программирование Android
объясните пожалуйста,как в андроид студио добавить вышеуказанную библиотеку,чтобы работало у меня вот это Активити package...


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

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

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