7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 86
1

Передача данных с сервера на телефон

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

Author24 — интернет-сервис помощи студентам
Не знаю, как организовать загрузку данных с сервера на телефон.
На сервере будут лежать данные, после того, как пользователь нажмет на кнопку к нему на телефон загружается массив/база данных.
Формат данных на сервере значение не имеет, главное, чтобы данные в любой момент можно было изменить.
Как лучше все это сделать?
Пробовал способом, описанным здесь: dajver. blogspot. ru/2013/02/json.html, но со стандартным сайтом работает, а с моим нет. И мне кажется там слишком много кода. Думаю есть вариант проще.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2015, 05:31
Ответы с готовыми решениями:

передача json данных с внешнего сервера через клиент в базу данных
Доброго времени суток. Времени до завтра мало, а который день бьюсь уже, новичок в этом деле....

Передача данных с сервера к клиенту
Добрый день! При передаче данных функцией SendNetworkString, на клинте строка принимается по...

Передача данных с сервера на андроид
Здравствуйте! Не знаю, как организовать загрузку данных с сервера на телефон с андроидом. На...

Передача данных с сервера на клиент
Доброе утро. Расскажите, пожалуйста, подробнее как передать таблицу значений с сервера на клиент?...

17
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
01.07.2015, 08:38 2
что конкретно не понятно?
1
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 86
01.07.2015, 09:25  [ТС] 3
Не знаю, как загрузить страницу на телефон.
Вроде бы XML - неплохой вариант, нужно как то загрузить исходный код, и после этого, с помощью XML Pull Parser, я уже всё сделаю, но мне не понятно именно чтение страницы из интернета.
Загружать нужно только текстовые данные
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
01.07.2015, 09:32 4
вобщем ты ждешь что кто-то напишет это за тебя, я так понял
0
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 86
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
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
01.07.2015, 09:44 6
Цитата Сообщение от Alexvsalex Посмотреть сообщение
Caused by: android.os.NetworkOnMainThreadException
https://www.cyberforum.ru/sear... id=9542987
1
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 86
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
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
01.07.2015, 10:08 8
а где инициализация массива String[] str; ?
если ее нет, то str[i] = line; и будет кидать null pointer exeption
1
393 / 338 / 83
Регистрация: 17.10.2014
Сообщений: 1,007
01.07.2015, 10:09 9
Alexvsalex,
Цитата Сообщение от Alexvsalex Посмотреть сообщение
com.alexvsalex.celebration.Photographer.backgroundThreadProcessing(Photographer. java:75)
лог не соответствует коду
1
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 86
01.07.2015, 10:09  [ТС] 10
26 строка - String[] str;
Я убрал из класса обработчик нажатия на элементы ListView, т.к. он не имеет отношение к теме(я же выделил, где 75 строка)
0
393 / 338 / 83
Регистрация: 17.10.2014
Сообщений: 1,007
01.07.2015, 10:12 11
Цитата Сообщение от Alexvsalex Посмотреть сообщение
String[] str;
эт не инициализированный массив
1
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
01.07.2015, 10:12 12
Цитата Сообщение от Alexvsalex Посмотреть сообщение
26 строка - String[] str;
Я убрал из класса обработчик нажатия на элементы ListView, т.к. он не имеет отношение к теме
ты читаешь что я пишу?
1
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 86
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
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
01.07.2015, 10:27 14
Лучший ответ Сообщение было отмечено Alexvsalex как решение

Решение

ему не нравится строка с тостом, ее надо запускать в главном потоке
лучше переписать все это с использованием AsyncTask, там три метода, но переопределить надо всего два и хватит

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

я наверное и ошибся насчет тоста, но все равно через AsyncTask было бы красивее и не возникнет проблем потом
1
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 86
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
Pablito
01.07.2015, 11:02
  #16

Не по теме:

красавчик, можешь ведь

0
393 / 338 / 83
Регистрация: 17.10.2014
Сообщений: 1,007
01.07.2015, 11:12 17
Alexvsalex, позволь высказать небольшое замечание
обнуляй(false) e1 и e2 перед запуском doInBackgroung()
на данный момент если запустишь первый раз и появиться ошибка в e1 и перезапустишь еще раз даже если и отработает без ошибки всеравно упадешь в error1()
1
7 / 7 / 4
Регистрация: 22.04.2015
Сообщений: 86
01.07.2015, 11:40  [ТС] 18
Спасибо, учел.
0
01.07.2015, 11:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2015, 11:40
Помогаю со студенческими работами здесь

$http.post передача данных с сервера
При передаче файла .json выдаёт такую ошибку XMLHttpRequest cannot load http://путь у .json...

Передача данных с одного сервера на другой
Задача: На первом сервере Server1 хранится база данных Prosto1. В этой базе данных имеется таблица...

Передача данных из сервера к клиенту или наоборот
Всем привет. В общем проблема такова: Есть скрипт, который создаёт персонажей по клику мыши и по...

Передача динамических данных с сервера на клиент по TCP/IP
Как только не гуглил, никак не могу найти пример реализации или что-то в этом роде. Требуется...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru