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

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

Войти
Регистрация
Восстановить пароль
 
 
Alexvsalex
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 84
#1

Передача данных с сервера на телефон - Программирование Android

01.07.2015, 05:31. Просмотров 497. Ответов 17
Метки нет (Все метки)

Не знаю, как организовать загрузку данных с сервера на телефон.
На сервере будут лежать данные, после того, как пользователь нажмет на кнопку к нему на телефон загружается массив/база данных.
Формат данных на сервере значение не имеет, главное, чтобы данные в любой момент можно было изменить.
Как лучше все это сделать?
Пробовал способом, описанным здесь: dajver. blogspot. ru/2013/02/json.html, но со стандартным сайтом работает, а с моим нет. И мне кажется там слишком много кода. Думаю есть вариант проще.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2015, 05:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача данных с сервера на телефон (Программирование Android):

Парсинг данных от сервера - Программирование Android
Доброго времени суток! Я разрабатываю андроид приложение которое будет выводить расписание. Столкнулся с такой проблемой мне нужно залить...

Загрузка данных с удалённого сервера - Программирование Android
Здравствуйте! Подскажите пожалуйста, как лучше, правильно или предпочтительнее, загружать данные с удаленного сервера, в мобильное...

Отправка и получение данных (запроса) из сервера - Программирование Android
Помогите пожалуйста! Мне нужно отправить данные на сервер, желательно чтобы и в ответ сервер что-то отправлял. Мне надо отправить на сервер...

Возврат данных с сервера. Не срабатывает условие - Программирование Android
Приветствую. Есть файл на сервере: <?php $login = $_POST; $pass = $_POST; if($login == "user" & $pass == "pass") { ?> { ...

Чтение данных с сервера (TCP клиент) - Программирование Android
Добрый день подскажите как реализовать чтение данных с сервера непрерывным потоком и выводить все в TextView. отправку на сервер...

Получение данных с сервера, длинные запросы - Программирование Android
Здравствуйте. Оговорюсь сразу, на сервере обычный php в цикле опрашивающий бд на изменения. Взял приложение с хабры и с обычными...

17
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
01.07.2015, 08:38 #2
что конкретно не понятно?
1
Alexvsalex
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 84
01.07.2015, 09:25  [ТС] #3
Не знаю, как загрузить страницу на телефон.
Вроде бы XML - неплохой вариант, нужно как то загрузить исходный код, и после этого, с помощью XML Pull Parser, я уже всё сделаю, но мне не понятно именно чтение страницы из интернета.
Загружать нужно только текстовые данные
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
01.07.2015, 09:32 #4
вобщем ты ждешь что кто-то напишет это за тебя, я так понял
0
Alexvsalex
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 84
01.07.2015, 09:39  [ТС] #5
Почему? Я пробовал вот таким способом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String result="";
        try {
            URL url = new URL("http://www.alexvsalex.esy.es/hg.xml");
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
                String line = null;
                while ((line = br.readLine()) != null) {
                    result += line +"\n";
                }
                br.close();
            } catch (IOException e){
                Toast.makeText(this, "Ошибка в чтение каталога", Toast.LENGTH_SHORT).show();
            }
 
        } catch (MalformedURLException e) {
            Toast.makeText(this, "Ошибка в загрузке каталога", Toast.LENGTH_SHORT).show();
        }
Но вылетает на строчке BufferedReader.
Вот лог:
Код
07-01 06:38:46.793      625-625/com.alexvsalex.celebration E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.alexvsalex.celebration/com.alexvsalex.celebration.Photographer}: android.os.NetworkOnMainThreadException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
            at android.app.ActivityThread.access$600(ActivityThread.java:123)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4424)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.os.NetworkOnMainThreadException
            at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
            at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
            at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
            at java.net.InetAddress.getAllByName(InetAddress.java:220)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
            at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
            at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
            at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
            at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
            at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
            at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
            at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
            at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
            at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
            at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
            at java.net.URL.openStream(URL.java:462)
            at com.alexvsalex.celebration.Photographer.onCreate(Photographer.java:37)
            at android.app.Activity.performCreate(Activity.java:4465)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
************at android.app.ActivityThread.access$600(ActivityThread.java:123)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
************at android.os.Handler.dispatchMessage(Handler.java:99)
************at android.os.Looper.loop(Looper.java:137)
************at android.app.ActivityThread.main(ActivityThread.java:4424)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:511)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
************at dalvik.system.NativeStart.main(Native Method)
Разрешение для доступа в интернет прописано
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
01.07.2015, 09:44 #6
Цитата Сообщение от Alexvsalex Посмотреть сообщение
Caused by: android.os.NetworkOnMainThreadException
http://www.cyberforum.ru/search.php?searchid=9542987
1
Alexvsalex
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 84
01.07.2015, 10:04  [ТС] #7
Спасибо, но все еще не работает.
Вынес в отдельный поток.
Перед вылетом приложение зависает на пол секунды.
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
package com.alexvsalex.celebration;
 
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
 
public class Photographer extends ListActivity {
 
    private SharedPreferences mSettings;
 
    public static final String APP_PREFERENCES = "mysettings";
    public static final String APP_PREFERENCES_photographer = "photographer";
 
    String[] str;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
 
        mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
 
        Thread thread = new Thread(null, doBackgroundThreadProcessing,
                "Background");
        thread.start();
 
 
 
    }
 
    private Runnable doBackgroundThreadProcessing = new Runnable() {
        public void run() {
            backgroundThreadProcessing();
        }
    };
 
    private void backgroundThreadProcessing() {
        try {
            URL url = new URL("http://www.alexvsalex.esy.es/hg.xml");
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
                String line;
                int i=0;
                while ((line = br.readLine()) != null) {
                    str[i] = line;
                    i++; //75 строка
                }
 
                br.close();
            } catch (IOException e){
                Toast.makeText(this, "Ошибка в чтение каталога", Toast.LENGTH_SHORT).show();
            }
 
        } catch (MalformedURLException e) {
            Toast.makeText(this, "Ошибка в загрузке каталога", Toast.LENGTH_SHORT).show();
        }
        ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
        setListAdapter(mAdapter);
    }
}
Лог:
Код
07-01 07:02:31.272      629-645/com.alexvsalex.celebration E/AndroidRuntime﹕ FATAL EXCEPTION: Background
    java.lang.NullPointerException
            at com.alexvsalex.celebration.Photographer.backgroundThreadProcessing(Photographer.java:75)
            at com.alexvsalex.celebration.Photographer.access$000(Photographer.java:19)
            at com.alexvsalex.celebration.Photographer$1.run(Photographer.java:62)
            at java.lang.Thread.run(Thread.java:856)
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
01.07.2015, 10:08 #8
а где инициализация массива String[] str; ?
если ее нет, то str[i] = line; и будет кидать null pointer exeption
1
androbro
326 / 287 / 61
Регистрация: 17.10.2014
Сообщений: 854
01.07.2015, 10:09 #9
Alexvsalex,
Цитата Сообщение от Alexvsalex Посмотреть сообщение
com.alexvsalex.celebration.Photographer.backgroundThreadProcessing(Photographer.java:75)
лог не соответствует коду
1
Alexvsalex
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 84
01.07.2015, 10:09  [ТС] #10
26 строка - String[] str;
Я убрал из класса обработчик нажатия на элементы ListView, т.к. он не имеет отношение к теме(я же выделил, где 75 строка)
0
androbro
326 / 287 / 61
Регистрация: 17.10.2014
Сообщений: 854
01.07.2015, 10:12 #11
Цитата Сообщение от Alexvsalex Посмотреть сообщение
String[] str;
эт не инициализированный массив
1
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
01.07.2015, 10:12 #12
Цитата Сообщение от Alexvsalex Посмотреть сообщение
26 строка - String[] str;
Я убрал из класса обработчик нажатия на элементы ListView, т.к. он не имеет отношение к теме
ты читаешь что я пишу?
1
Alexvsalex
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 84
01.07.2015, 10:19  [ТС] #13
Конечно читаю, просто не так понял вас.
Сейчас вроде подправил, теперь ругается на то, что listview создается не в главном потоке:
Код
07-01 07:17:22.848      624-645/com.alexvsalex.celebration E/AndroidRuntime﹕ FATAL EXCEPTION: Background
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
            at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039)
            at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:709)
            at android.view.View.requestLayout(View.java:12675)
            at android.view.View.requestLayout(View.java:12675)
            at android.view.View.requestLayout(View.java:12675)
            at android.view.ViewGroup.removeAllViews(ViewGroup.java:3673)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:249)
            at android.app.Activity.setContentView(Activity.java:1835)
            at android.app.ListActivity.ensureList(ListActivity.java:312)
            at android.app.ListActivity.setListAdapter(ListActivity.java:263)
            at com.alexvsalex.celebration.Photographer.backgroundThreadProcessing(Photographer.java:93)
            at com.alexvsalex.celebration.Photographer.access$000(Photographer.java:19)
            at com.alexvsalex.celebration.Photographer$1.run(Photographer.java:63)
            at java.lang.Thread.run(Thread.java:856)
Новый код:
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
package com.alexvsalex.celebration;
 
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
 
public class Photographer extends ListActivity {
 
    private SharedPreferences mSettings;
 
    public static final String APP_PREFERENCES = "mysettings";
    public static final String APP_PREFERENCES_photographer = "photographer";
 
    String[] str;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
 
        mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
 
        Thread thread = new Thread(null, doBackgroundThreadProcessing,
                "Background");
        thread.start();
 
 
        /*String[] str = new String[]{
                "Василий Пупкин\n 100 руб. - одна фотография",
                "Виктор Петров\n 900 руб. - десять фотографий"
        };*/
 
 
 
    }
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
 
        SharedPreferences.Editor editor = mSettings.edit();
 
        editor.putString(APP_PREFERENCES_photographer,l.getItemAtPosition(position).toString());
 
        editor.apply();
 
        startActivity(new Intent(Photographer.this, Choose.class));
    }
 
 
    private Runnable doBackgroundThreadProcessing = new Runnable() {
        public void run() {
            backgroundThreadProcessing();
        }
    };
 
    private void backgroundThreadProcessing() {
        String result="";
        int i=0;
        try {
            URL url = new URL("http://www.alexvsalex.esy.es/hg.xml");
            try {
                BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
                String line;
 
                while ((line = br.readLine()) != null) {
                    result += line +"\n";
                    i++;
                }
                br.close();
            } catch (IOException e){
                Toast.makeText(this, "Ошибка в чтение каталога", Toast.LENGTH_SHORT).show();
            }
 
        } catch (MalformedURLException e) {
            Toast.makeText(this, "Ошибка в загрузке каталога", Toast.LENGTH_SHORT).show();
        }
        String[] str = new String[i];
        for(int y=0;y<i;y++) {
            str[y]=result;
        }
        ArrayAdapter<String> mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
        setListAdapter(mAdapter);
    }
}
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
01.07.2015, 10:27 #14
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
ему не нравится строка с тостом, ее надо запускать в главном потоке
лучше переписать все это с использованием AsyncTask, там три метода, но переопределить надо всего два и хватит

метод doInBackground() - тут все запрашиваем, парсим и так далее
onPostExecute() - тут показываем тосты да и вообще что угодно, это будет выполнено в главном потоке

я наверное и ошибся насчет тоста, но все равно через AsyncTask было бы красивее и не возникнет проблем потом
1
Alexvsalex
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 84
01.07.2015, 11:00  [ТС] #15
Так у меня toast выводят исключения. Как я разделю их по двум методам?
Уже понял, создам переменные типа boolean.

Добавлено через 25 минут
Наконец-то заработало, вот окончательный код:
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
package com.alexvsalex.celebration;
 
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
 
public class Photographer extends ListActivity {
 
    private SharedPreferences mSettings;
 
    public static final String APP_PREFERENCES = "mysettings";
    public static final String APP_PREFERENCES_photographer = "photographer";
 
    String[] str;
    ArrayAdapter<String> mAdapter;
    boolean e1=false;
    boolean e2=false;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
 
        mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
 
        (new Asyn()).execute();
 
 
 
    }
 
    public void error1(){
        Toast.makeText(this, "Ошибка в чтение каталога", Toast.LENGTH_SHORT).show();
    }
    public void error2(){
        Toast.makeText(this, "Ошибка в загрузке каталога", Toast.LENGTH_SHORT).show();
    }
    public void set(){
        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
        setListAdapter(mAdapter);
    }
    class Asyn extends AsyncTask<Void, Integer, Void> {
 
        @Override
        protected Void doInBackground(Void... parameter) {
            int i=0;
            try {
                URL url = new URL("http://www.alexvsalex.esy.es/hg.xml");
                try {
                    BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
                    String line;
                    str=new String[100];
                    while ((line = br.readLine()) != null) {
                        str[i] = line;
                        i++;
                    }
                    br.close();
                } catch (IOException e){
                    e1=true;
                }
 
            } catch (MalformedURLException e) {
                e2=true;
            }
            return null;
        }
 
        protected void onPostExecute(Void result) {
            if(e1) error1();
            if(e2) error2();
            set();
        }
 
    }
 
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
 
        SharedPreferences.Editor editor = mSettings.edit();
 
        editor.putString(APP_PREFERENCES_photographer,l.getItemAtPosition(position).toString());
 
        editor.apply();
 
        startActivity(new Intent(Photographer.this, Choose.class));
    }
}
0
01.07.2015, 11:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 11:00
Привет! Вот еще темы с ответами:

Передача данных - Программирование Android
Всем доброго времени суток. Написал приложение на андроид 4.2 для планшета, так же есть программа для ноута. Суть в том что по...

Загрузка Xml с сервера и отображение данных в приложении - Программирование Android
У меня такой вопрос: как можно загрузить xml файл в приложение и отобразить его чтобы потом без подключения к интернету можно было увидеть...

Передача данных в interface - Программирование Android
Мне необходимо передать данные из файла настроек в интерфейс Retrofita. Вот код интерфейса, необходимо записать в переменную gps, данные...

Layout передача данных - Программирование Android
Каким способом можно передать данные из дочернего Layout в родительский? Умею только передавать данные в дочерний Layout через Intent. ...


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

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

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