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

Написание клиент-серверного приложения - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android ListView шире экрана http://www.cyberforum.ru/android-dev/thread1084697.html
Хочу сделать так, чтобы текст в кастомизированном ListView не переносился на другую строку, а растягивался шире экрана. Установил у ListView и у TextView (элемент кастомизации списка) "layout_width=wrap_content", но все равно переносит. Возможно ли добиться того, что я хочу?
Программирование Android Как обновить домашний виджет с данными вытащил из JSON файл есть домашний виджет, который "должен" дисплей тексты и изображения, как только вытащил из файла JSON с моего сервера, но это ничего не показывая. Мой кода Java: public class DisplayHadith extends AppWidgetProvider { public static String CLOCK_WIDGET_UPDATE = "CLOCK_WIDGET_UPDATE"; DefaultHttpClient httpclient; HttpPost httppost; http://www.cyberforum.ru/android-dev/thread1084665.html
Как лучше "повесить" обработчик событий на пункты списка, а потом отлавливать нажатие на них Программирование Android
Здравствуйте! Ниже приведенный код, получает json строку, затем достает от туда массив и данные из каждой строчки массива, распихивает в "маленькие" layout'ы которые в свою очередь закидываются в LayoutInflater, таким образом получается список. Натолкните, пожалуйста, на мысль, как лучше реализовать. Что бы в одной строке(в "маленьком" layout'е) не выводить все, а только одну строчку, все...
Программирование Android Проверка на существование массива
Здравствуйте. есть такой код. ... for(int i=0; i<3; i++){ Log.d(ci+" ",label_str.toString().length()+""); // <- падает здесь с java.lang.NullPointerException } ...нужно проерить строки пустые или нет как быть?
Программирование Android Сериализация http://www.cyberforum.ru/android-dev/thread1084564.html
У меня есть ArrayList<ZoneView>; который я сериализую в функции onPause(); но при десериализации обратно из файла я получаю только поля протого типа(int), а ArrayList<CategoryForZone> путой, подскажите, как лучше сериализовать объекты типа ZoneView Поля классов: public class ZoneView implements Serializable{ private static final long serialVersionUID = 2952056031459050819L; //Поля...
Программирование Android Работа с разными пакетами Всем доброго дня. Подскажите ссылку - не смог найти нормального объяснения в гугле. Нужно реализовать чтобы в приложении было несколько пакетов и в зависимости от условия приложение выбирало нужный для работы, ну стандартный пример: com.site.name.pro com.site.name.free Соответственно могу ли я сделать папки layout-pro и layout-free чтобы подгружать разные xml для работы с каждым... подробнее

Показать сообщение отдельно
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
30.01.2014, 19:09     Написание клиент-серверного приложения
ChristmasSocks, Tester64,
вроде тут ничего сложного нет.

Есть две стороны: сервер и клиент.
Сначала стоит определиться с платформой. Это может быть сервер на базе php, c# asp.net/mvc, java, node.js и так далее.

В самом-самом вкратце, вебсервер получает запрос. С помощью раутинга определяем метод, который будет получать этот запрос. За раутинг в разных технологиях отвечают разные механизмы, так в spring mvc java это servlet dispatcher, в node.js это (как правило) express модуль, для c# asp.mvc это global routes и так далее.

Скоп этих ваших методов и будут представлять собой API.

Часть клиента - как хотите. Делаем запрос на сервер по определённому endpoint'у, получаем ответ. Всё.

Вы спрашиваете про авторизацию. Для авторизации обычно используется token. Ключ, по которому веб сервер будет определять кто мы и как нас зовут. Токен будем слать в header.

Но давайте посмотрим это на практике. Я буду использовать node.js express:
WebStorm нагенерил сразу шаблон, покажу самое важное.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
 
var app = express();
app.set('port', process.env.PORT || 3002);
 
//Отправка get-запроса получаем index.
app.get('/', routes.index);
//Отправка get-запроса /users получаем юзеров
app.get('/users', user.list);
 
//Запускаем сервер
http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Теперь обработчики запросов:
routes/index.js

Javascript
1
2
3
exports.index = function(req, res){
  res.send('Hello, world');
};
routes/users.js

Javascript
1
2
3
exports.list = function(req, res){
  res.send("respond with a resource");
};
Запуск, проверка -
вывод>curl 127.0.0.1:3002
Hello, world


конец поста №1

Добавлено через 15 минут
Клиент:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class HttpClientFactory {
 
    private static DefaultHttpClient client;
 
    public synchronized static DefaultHttpClient getThreadSafeClient() {
  
        if (client != null)
            return client;
         
        client = new DefaultHttpClient();
        
        ClientConnectionManager mgr = client.getConnectionManager();
        
        HttpParams params = client.getParams();
        client = new DefaultHttpClient(
        new ThreadSafeClientConnManager(params,
            mgr.getSchemeRegistry()), params);
  
        return client;
    } 
}
Есть доступ к Http соединению. Запросы:

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
public class ServerRequestWorker {
 
    public void index() {
        try {
            JSONObject jsonObject = commonRequest("http://you_url:3002/index");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
 
    public void users() {
        try {
            JSONObject jsonObject = commonRequest("http://you_url:3002/users");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
 
    }
 
    private JSONObject commonRequest(String url) throws IOException, JSONException {
        HttpClient httpClient = HttpClientFactory.getThreadSafeClient();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse execute = httpClient.execute(httpGet);
        return new JSONObject(EntityUtils.toString(execute.getEntity()));
 
    }
}
Обращаться каждую n-секунду на сервер с таким запрос - зло и антипаттерн.
Успешная авторизация - выдали token, такой хэш-ключ. Пока он есть, ставим его в заголовок и все запросы идут с ним.

Java
1
2
3
4
5
6
7
private JSONObject commonRequest(String url) throws IOException, JSONException {
        HttpClient httpClient = HttpClientFactory.getThreadSafeClient();
        HttpGet httpGet = new HttpGet(url);
        httpGet.setHeader("X-Auth-Token", "Some");
        HttpResponse execute = httpClient.execute(httpGet);
        return new JSONObject(EntityUtils.toString(execute.getEntity()));
    }
Проверяем:

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
exports.list = function(req, res){
    var tokenFound = false;
    for(var item in req.headers) {
        if (item == 'x-auth') {
            console.log('Token found ' + item + ": " + req.headers[item]);
            tokenFound = true;
        }
    }
    if (!tokenFound) {
        res.send({code : 0, message : 'Malformed token. Login please'})
    }
  res.send("respond with a resource");
};
1>curl -H X-Auth:cyberForumHash 127.0.0.1:3002/users
respond with a resource


2>curl 127.0.0.1:3002/users
{
"code": 0,
"message": "Malformed token. Login please"
}


Это простейший пример. Для авторизации можно использовать готовые инструменты, типа passport (для js), membership api (для c# asp.net) и так далее.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru