Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
MRabaev
7 / 7 / 1
Регистрация: 27.09.2014
Сообщений: 43
#1

Android.os.networkonmainthreadexception

21.03.2015, 00:37. Просмотров 2485. Ответов 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 при создании сокета
Доброго времени суток товарищи. Возникла очень серьезная проблемма. Решил я...

Исключение NetworkOnMainThreadException
response.body().string() библиотеки okHttp выдает исключение...

Ошибка NetworkOnMainThreadException
Всем привет, делаю приложку по примерам. В качестве БД используется MySQL....

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

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

6
Levabala
0 / 0 / 2
Регистрация: 28.06.2013
Сообщений: 18
27.06.2015, 15:41 #2
Ошибка происходит при getInputStream(). В официальной документации что-то говорится про запрет на запросы в основном потоке, но я пока не понял, что это значит
0
Pablito
2707 / 2154 / 731
Регистрация: 12.05.2014
Сообщений: 7,521
Завершенные тесты: 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 / 2
Регистрация: 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 / 2
Регистрация: 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

Не предлагается установка Android SDK при установке Android Studio
на сайте https://developer.android.com/studio/... скачал exeшник для...

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

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


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

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

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