• Проект с использованием HttpPost от Apache, будет ли работать на Android 6?

    StFaustoff
    @StFaustoff
    jDev
    Это все зависит от вас, а точнее, от compileSdkVersion. Конечно, в новых SDK эта библиотека deprecated, однако есть небольшой хак, если не хочется переписывать классы сетевого взаимодействия. Выглядит он примерно так
    compileSdkVersion 23
    useLibrary 'org.apache.http.legacy'

    прописывается в gradle, версия SDK любая
    Ответ написан
    3 комментария
  • С чего начать изучение мобильной разработки под Android?

    StFaustoff
    @StFaustoff
    jDev
    Для начала воспользуйтесь этим. Уроки там может не особенно новые, но основа хорошая и логическая цепь подачи материала связана.
    После можно ставить задачу и решать, попутно осваивая нужные инструменты через гугление.
    Однозначно нет ни одного форума или другого ресурса где вы сможете освоить программирование без практики.
    Ответ написан
    Комментировать
  • Начинаю программировать на Java, что не так в данной программе?

    StFaustoff
    @StFaustoff
    jDev
    Все дело в том, что для JVM нужна точка старта(как и во всех других случаях в программировании), в Java это класс с методом main. В вашем классе нет ошибок, но и нет места с которого должна начаться работа. Посмотрите внимательнее урок, возможно есть другой класс, который содержит данный метод.
    Ответ написан
    Комментировать
  • Retrofit, нужно ли использовать expire/max-age?

    StFaustoff
    @StFaustoff
    jDev
    Достаточно только JSESSIONID(именно та куча символов)
    max-age вроде как говорит о длительности жизни печенек на стороне сервера, ну а Expires по видимому это дата создания сессии.
    Ответ написан
    4 комментария
  • Как сделать SSL socket клиент серверное приложение?

    StFaustoff
    @StFaustoff
    jDev
    Работа с сертификатами бывает разная. Это может быть как просто использование сертификата на стороне сервера и дальнейшая проверка через центры сертификации, так и использование самоподписанных сертификатов, когда и клиент и сервер имеют один сертификат и обмениваются ими при подключении. Первый вариант проще, второй бесплатный.
    После этого нужно настроить веб контейнер. Вот тут есть хороший пример настройки TomCat'a. Собственно я использую двухфазную самоподписанную сертификацию.
    После этого начнется "жара" =) Так как я пользуюсь самоподписанным сертификатом, то задача немного усложняется. Дело в том, что на стороне мобильного клиента необходима предварительная настройка контекста интернет соединения для работы с сертификатом. Соответственно идут клиент обращается серверам сертификации, чтобы проверить надежность ресурса. Но так как все самопальное, то приходиться настройки безопасности переводить в режим - доверять всему.
    После этой настройки, контекст передается для создаваемого коннекта и регистрируется.
    Приведу пример кода, выстраданного многими часами кропотливой работы
    try{// Работа с SSL пробрасывает исключения, порой очень неприятные и непонятно как устранимые
       KeyStore keyStore = KeyStore.getInstance("Your_Type_Of_Certificate");//делаем хранилище ключей, аналогичное типу Вашего сертификата
       InputStream in = ...// крепим к потоку сам файл сертификата
       try{
          keyStore.load(in, "Your_Password".toCharArray());//грузим в хранилище сертификат, дополняя его паролем от сертификата
       }catch (Exception ex){
          Log.wtf("OMG",ex.getLocalizedMessage());//либо файла нет, либо пароль не тот
       }finally {
          in.close();
       }
       // Один из "столпов" клиентского SSL, отвечает за хранение всех сертификатов. Имеются разные варианты его настройки(разные алгоритмы)
       KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
       kmf.init(keyStore, "Your_Password".toCharArray());
       KeyManager[] keyManagers = kmf.getKeyManagers();
    
       //Второй элемент, который "должен" проверять, валидны ли наши сертификаты
       TrustManager[] wrappedTrustManagers = new TrustManager[]{
           new X509TrustManager() {
               public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                  return null;
                }
                public void checkClientTrusted(X509Certificate[] certs, String authType) { }
                public void checkServerTrusted(X509Certificate[] certs, String authType) {}
            }
       };
       SSLContext sslContext = SSLContext.getInstance("TLSv1");//Создаем контекст SSL по типу протокола
       sslContext.init(keyManagers, wrappedTrustManagers,  new java.security.SecureRandom());//инициализируем его
           return sslContext;// Радуемся =)
       }catch (Exception ex){
            Log.wtf("OMG", ex.getLocalizedMessage());// Печалимся ='(
            return null;
       }


    После этого контекст можно использовать при создании соединений
    //Устанавливаем контекст
       HttpsURLConnection.setDefaultSSLSocketFactory(методНаписанныйВыше().getSocketFactory());
        //Та самая "защита" которая говорит "мне плевать на всех, коннекчусь куда хочу". Виной этому самоподписанный сертификат.
       HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
       
       SchemeRegistry registry = new SchemeRegistry();
    
        SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
        socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
        registry.register(new Scheme("Type_Of_Connection", socketFactory, 443));
    
        SingleClientConnManager mgr = new SingleClientConnManager(yourConnection.getParams(), registry);
        //Я работаю по https, по этому пример для него
        DefaultHttpClient httpClient = new DefaultHttpClient(mgr, yourConnection.getParams());
    
        HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);


    За такой код я бы и сам себя убил, но увы, любые попытки его поправить к успеху не привели, я рукожоп)
    Стоит заметить, что я использую библиотеки org.apache.http и другие deprecate вещи. Вам же я желаю сделать все по уму и красоте. Надеюсь помог)
    Если будут вопросы, обращайтесь.
    Ответ написан
    4 комментария
  • Как в таблице SQLite зная один string определить ее id?

    StFaustoff
    @StFaustoff
    jDev
    Есть такой класс - Cursor
    Он используется в основном для работы с SQLite в Android. А ещё есть SQLiteOpenHelper Они помогут в работе с БД.
    В вашем случае запрос будет примерно таким
    Cursor cursor = this.getReadableDatabase().query(tableName, null, "city =?", new String[]{city}, null, null, null);
    int[] arr = new int[cursor.getCount()];i=0;
    if(cursor.moveToFirst()){
        int id= cursor.getColumnIndex("_id");
            do {
                arr[i] = cursor.getInt(id));
                i++;
            } while (cursor.moveToNext());
        }


    И если вы нагуглите инфу по обозначенным классам,то для начала это решит большую часть ваших вопросов.
    Ответ написан
    Комментировать
  • Как вызвать Toast с другого класса?

    StFaustoff
    @StFaustoff
    jDev
    Ка дополнительный вариант ко всем предыдущим ответам, можно попробовать MyClass.this.

    PS
    Только я не пойму такой мудреной системы инстанцировать Activity в другом Activity.
    Мы создадим Activity в другом Activity чтобы ты мог использовать Activity пока работает Activity =)

    757-tachka-na-prokachku-ostalos-tolko-pr
    Ответ написан
    Комментировать
  • Как реализовать обновление ListView на Fragment?

    StFaustoff
    @StFaustoff
    jDev
    В данном случае проще обновлять ListView. В Listener, а точнее в setOnItemSelectedListener, вызываете метод адаптера для ListView - notifyDataSetChanged(), он и обновит вам всю инфу. Только не забудьте для начала либо добавить нужную, либо очистить полностью и залить заново.
    Ответ написан