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

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

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

Android.os.networkonmainthreadexception - Android

21.03.2015, 00:37. Просмотров 1752. Ответов 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 Android
Android android:theme="@android:style/Theme.Dialog"
Android и С++ Android
Android Qt 5.1.1 for Android
С++ и android Android
Hello android Android
Android C# and Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Levabala
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 18
27.06.2015, 15:41     Android.os.networkonmainthreadexception #2
Ошибка происходит при getInputStream(). В официальной документации что-то говорится про запрет на запросы в основном потоке, но я пока не понял, что это значит
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,215
Завершенные тесты: 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
Еще ссылки по теме:

Android Android
Android NetworkOnMainThreadException при сохранении картинки в битовый массив
Android с 0 Android
Android Android.os.NetworkOnMainThreadException при создании сокета
Исключение NetworkOnMainThreadException 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
Ответ Создать тему
Опции темы

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