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

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

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

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

21.03.2015, 00:37. Просмотров 1905. Ответов 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>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2015, 00:37     Android.os.networkonmainthreadexception
Посмотрите здесь:

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

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

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

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

Android - Программирование Android
Всем доброго времени суток! Есть вопрос! Код приложения который написан на эклипсе например игра! Если этот код использовать в Андроид...

Android - Программирование Android
пишу приложение на андроид (не давно начал изучать) как сделать в андроид приложении 1+2=? при нажатии на imagebutton(1.2.3) чтоб вместо...

Hello android - Программирование Android
Пишу, значит, вот это: package lucky.myfirstandroidapplication; import android.os.Bundle; import android.app.Activity; ...

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

https://github.com/mrabaev48/Diction...ter/Dictionary
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2015, 12:37     Android.os.networkonmainthreadexception
Еще ссылки по теме:

Qt 5.1.1 for Android - Программирование Android
Здравствуйте! Пытаюсь, использовать библиотеку Qt для Android, установил всё по инструкции на сайте: Android SDK, NDK, JM, Ant, ну, и сам...

Android L - Программирование Android
Привет всем дорогие друзья. Меня вот что интересует. Знаю что достаточно времени назад вышел L для разработчиков. Гайды по оформлению и...

Android с 0 - Программирование Android
Всем привет. Когда-то давно начинал изучать Андроид не зная Java(за что, конечно, поплатился), и сейчас решил вновь заняться разработкой...

Android и С++ - Программирование Android
Всем привет! Понимаю, что подобная тема скорее всего поднималась, но шерстить 43 страницы данного раздела меня не радует, да и в поиск не...

С++ и android - Программирование Android
Привет форумчане, такая ситуация. Мой друг изучил доволи неплохо с++ , и вот натрапил на разработку под андроид и стоит перед вопросом,...


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

Или воспользуйтесь поиском по форуму:
Levabala
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 18
28.06.2015, 12:37     Android.os.networkonmainthreadexception #7
Спасибо, посмотрю)
Yandex
Объявления
28.06.2015, 12:37     Android.os.networkonmainthreadexception
Ответ Создать тему
Опции темы

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