Android — Блог по программированию https://ot7.ru Курсы по веб дизайну, программированию, графике и дизайну Mon, 27 Feb 2017 14:12:19 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.7.2 https://ot7.ru/wp-content/uploads/2019/11/cropped-it2-32x32.jpg Android — Блог по программированию https://ot7.ru 32 32 Загрузка данных на сервер в асинхронном режиме Android Studio https://ot7.ru/2017/02/27/%d0%b7%d0%b0%d0%b3%d1%80%d1%83%d0%b7%d0%ba%d0%b0-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%b2-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd/ Mon, 27 Feb 2017 14:12:19 +0000 http://manuscript.ikurs.kz/?p=2106 private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {//функция формирования POST данных для отправки на сервер StringBuilder result = new StringBuilder(); boolean first = true; for(Map.Entry<String, String> entry : params.entrySet()){ if (first) first = false; else result.append("&"); result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); result.append("="); result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); } return result.toString();//возвращаем сформированную строку для POST данных которые будут отправляться на сервер rateandshare.kz } //--------------------------------Загрузка изображения-------------------------------- private class DownloadWebPageTask1 extends AsyncTask<ImageAndName, Void, String> {//загрузка изображения на сервер String attachmentName = "bitmap";//имя прикрепленных данных String attachmentFileName = "bitmap.jpg";//имя файла String crlf = "\r\n";//символ перехода на новую строку String twoHyphens = "--";//спец символы для создания POST запроса String boundary = "*****";//спец символы для создания POST запроса @Override protected String doInBackground(ImageAndName... params) { URL url = null; String response = ""; String requestURL="android.gorodmoy.com";//адрес куда мы будем отправлять POST данные для обработки try { url = new URL(requestURL);//создаем объект url из строкового типа requestURL //сохранение данных в из картинки в массив Bitmap bmp = params[0].Bmp;//Получаем изображение которое мы сфотографировали String Name=params[0].Name;//Получаем имя изображения которое состоит из времени когда была сделагна фотография и идентификатора телефона attachmentFileName=Name+".jpg";//добавляем расширение файла ByteArrayOutputStream stream = new ByteArrayOutputStream();//создаем объект для передачи потоковых бинарных данных. Это используется для передачи изображений bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);//преобразуем наше изображение из BMP формата в JPEG byte[] byteArray = stream.toByteArray();//Преобразуем изображение в массив байтов //передача данных HttpURLConnection httpUrlConnection = null;//объявляем объект для создания интернет соединения httpUrlConnection = (HttpURLConnection) url.openConnection();// открываем соединени с сайтом httpUrlConnection.setUseCaches(false); // запрещаем использовать кэширования. httpUrlConnection.setDoOutput(true);//разрешаем использование POST запросов (в нашем случае для передачи изображения) httpUrlConnection.setRequestMethod("POST");//устанавливаем метод передачи данных httpUrlConnection.setRequestProperty("Connection", "Keep-Alive");// настройка соединения для повторного использования соединений HTTP httpUrlConnection.setRequestProperty("Cache-Control", "no-cache");//запрет на кэширование httpUrlConnection.setRequestProperty( "Content-Type", "multipart/form-data;boundary=" + this.boundary);//настройка POST данных для передачи данных частями. Используется при передачи больших объемов данных. DataOutputStream request = new DataOutputStream( httpUrlConnection.getOutputStream());//создаем объект для передачи данных request.writeBytes(this.twoHyphens + this.boundary + this.crlf);//начинаем запись POST данных по стандарту. Формируем POST запрос request.writeBytes("Content-Disposition: form-data; name=\"" + this.attachmentName + "\";filename=\"" + this.attachmentFileName + "\"" + this.crlf); request.writeBytes(this.crlf); request.write(byteArray); request.writeBytes(this.crlf); request.writeBytes(this.twoHyphens + this.boundary + this.twoHyphens + this.crlf); request.flush(); request.close();//закрываем запрос InputStream responseStream = new BufferedInputStream(httpUrlConnection.getInputStream());//получаем ответ от сервера BufferedReader responseStreamReader = new BufferedReader(new InputStreamReader(responseStream)); String line = ""; StringBuilder stringBuilder = new StringBuilder(); while ((line = responseStreamReader.readLine()) != null) {//читаем данные с сервера stringBuilder.append(line).append("\n"); } responseStreamReader.close(); response = stringBuilder.toString(); responseStream.close(); httpUrlConnection.disconnect(); } catch (Exception e) { Toast toast = Toast.makeText(getApplicationContext(),// если произошли ошибки при передаче данных то мы выводим сообщение об ошибке "Произошла ошибка при загрузке отзыва на сайт. Попробуйте еще раз!", Toast.LENGTH_LONG); toast.show(); e.printStackTrace(); } return response;//возвращаем ответ сервера. } @Override protected void onPostExecute(String result) {//обрабатываем ответ сервера при успешной загрузке данных Toast toast = Toast.makeText(getApplicationContext(),// если произошли ошибки при передаче данных то мы выводим сообщение об ошибке "Спасибо вам за отзыв. Ваш отзыв успешно загружен на сайт rateandshare.kz!", Toast.LENGTH_LONG); toast.show(); } } //--------------------------------Загрузка описания и кода-------------------------------- private class ImageAndName // Создаем свой класс в котором будет находиться имя картинки и сама картинка. Это необходимо для того чтобы передать данные на сервер в одном объекте { String Name; Bitmap Bmp; } private class DownloadWebPageTask extends AsyncTask<String, Void, String> {//класс для передачи данных на сервер в асинхронном режиме. @Override protected String doInBackground(String... params) {//выполнение фонового асинхронного задания. В нашем случае используется для передачи данных на сервер URL url = null;//создаем объект в котором будет храниться адрес страницы на которую мы будем отправлять POST данные String response = "";//Переменная для хранения ответа сервера String requestURL=params[0];//Адрес в интернет на который мы будем передвать пост данные try { url = new URL(requestURL);//Создаем объект адреса в интернет HttpURLConnection conn = (HttpURLConnection) url.openConnection();//открываем соединение с веб страницей conn.setReadTimeout(15000);//устанавливаем таймаут ответа сервера в процессе чтения страницы на 15 секунд conn.setConnectTimeout(15000);//Устанавливаем таймаут времени соединения с сервером на 15 секунд conn.setRequestMethod("POST");//Задаем метод передачи данных POST conn.setDoInput(true);//Разрешаем передачу данных на сервер conn.setDoOutput(true);//Разрешаем прием данных с сервера OutputStream os = conn.getOutputStream();//Объявляем объет для передачи данных на сервер BufferedWriter writer = new BufferedWriter(//инициализируем объект для записи данных на сервер new OutputStreamWriter(os, "UTF-8")); HashMap<String, String> postDataParams;//Объявляем объект для хранения передаваемых данных postDataParams=new HashMap<String, String>();//инициализируем объект для хранения передаваемых данных //Add Key/Value pairs postDataParams.put("name", params[1]);//Задаем значения POST данных postDataParams.put("imei", params[2]); writer.write(getPostDataString(postDataParams));//Передаем данные на сервер writer.flush();//Сохранить данные из кэша writer.close();//завершить передачу данных на свервер os.close();//Завершить соединение с сервером int responseCode=conn.getResponseCode();//получить код отвечающий за результат соединения if (responseCode == HttpsURLConnection.HTTP_OK) {//если все прошло успешно String line;//переменная в которой будем записывать ответ сервера BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));//создаем объект чтения данных с сервера while ((line=br.readLine()) != null) {//читаем пока есть данные response+=line; } } else { response="";// в случае ошибки отвер пустой. } } catch (Exception e) { e.printStackTrace();//стандартный обработчик исключений } return response;//возвращаем ответ сервера } @Override protected void onPostExecute(String result) { //productDescription.setText(result); } } public void downloadWebpage() { //--------Загрузка текстовых данных-------------- TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);//создаем объект для получения imei кода который будем использовать как идентификатор пользователя String imei = telephonyManager.getDeviceId();//получаем imei код String S1;//объявляем переменные в которых будем хранить параметры передаваемые на сервер S1="Алексей Каверин"; try { S1 = URLEncoder.encode(S1, "UTF-8");//кодируем данные для передачи на сервер } catch (Exception e) { // произошла ошибка. Toast toast = Toast.makeText(getApplicationContext(),// если произошли ошибки при передаче данных то мы выводим сообщение об ошибке "Возникла ошибка при передаче данных на сервер. Проверьте подключение к интернет и повторите отправку.", Toast.LENGTH_LONG); toast.show(); } DownloadWebPageTask task = new DownloadWebPageTask();//создаем объект для загрузки данных на сервер task.execute(new String[]{"http://android.gorodmoy.com", S1, imei});//запускаем загружку данных на сервер //---------------Загрузка изображения // DownloadWebPageTask1 task1 = new DownloadWebPageTask1();//создаем объект для загурзки изображения на сервер // ImageAndName IMN = new ImageAndName();//создаем объект в котором будем хранить фото и имя файла //IMN.Bmp = myphoto;//записываем фото // IMN.Name = S5;//записываем имя файла // task1.execute(IMN);//запускаем передачу данныха на сервер. } //--------------------------------------------------------------------------------------------------------- загрузка производителя ссервера

 

]]>
Android studio Проект по работе с картой. Геолокация. https://ot7.ru/2017/02/24/android-studio-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82-%d0%bf%d0%be-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b5-%d1%81-%d0%ba%d0%b0%d1%80%d1%82%d0%be%d0%b9-%d0%b3%d0%b5%d0%be%d0%bb%d0%be%d0%ba%d0%b0%d1%86/ Fri, 24 Feb 2017 14:08:09 +0000 http://manuscript.ikurs.kz/?p=2104 package com.example.admin.myapplication; import android.Manifest; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.MapsInitializer; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng; public class MainActivity extends AppCompatActivity { GoogleMap googleMap;//объект гугл карты MapView mMapView;//объект для отображения карты static double TARGET_LATITUDE = 49.8240877;//координаты на карте static double TARGET_LONGITUDE = 72.8887742; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mMapView = (MapView) findViewById(R.id.mapView);//получаем карту mMapView.onCreate(savedInstanceState);//создаем карут mMapView.onResume(); // необходимо для отображения карты try { MapsInitializer.initialize(this.getApplicationContext());//инициализируем карту } catch (Exception e) { e.printStackTrace(); } mMapView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap mMap) {//получаем карту в асинхронном режиме googleMap = mMap; // показать кнопку перемещения в моую локацию int status = getPackageManager().checkPermission(Manifest.permission.ACCESS_COARSE_LOCATION,//проверка есть ли у приложения доступ к геоданным getPackageName()); if (status != PackageManager.PERMISSION_GRANTED)return ;//если нет доступа к геоданным то мы возвращаем null что означает локацию определить невозможно googleMap.setMyLocationEnabled(true); // отображаем маркер на карте по умолчанию это Сидней LatLng sydney = new LatLng(TARGET_LATITUDE, TARGET_LONGITUDE); // для автоматического масштабирования карты и управления камерой CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build(); googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); } }); } }

 

Манифест

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.admin.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzaSyB9W_3A70USW6tb4Rlhfq0BaNSho30Zse8"/>

    </application>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>


</manifest>

Дизайн

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.admin.myapplication.MainActivity">



    <com.google.android.gms.maps.MapView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/mapView" />
</RelativeLayout>

 

]]>
Асинхронная загрузка веб страницы в Android studio https://ot7.ru/2017/02/13/%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d0%b0%d1%8f-%d0%b7%d0%b0%d0%b3%d1%80%d1%83%d0%b7%d0%ba%d0%b0-%d0%b2%d0%b5%d0%b1-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86%d1%8b-%d0%b2-android-2/ Mon, 13 Feb 2017 14:22:54 +0000 http://manuscript.ikurs.kz/?p=2000 private class DownloadWebPageTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { URL url = null; String response = ""; String requestURL="https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22karagandy%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys"; try { url = new URL(requestURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(15000); conn.setConnectTimeout(15000); conn.setRequestMethod("GET"); int responseCode=conn.getResponseCode(); if (responseCode == HttpsURLConnection.HTTP_OK) { String line; BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); while ((line=br.readLine()) != null) { response+=line; } } else { response=""; } } catch (Exception e) { e.printStackTrace(); } return response; } @Override protected void onPostExecute(String result) { //отобразаем полученные данные с сервера try { textView10.setText(result); } catch(Exception e) {} } } public void readWebpage() { MainActivity.DownloadWebPageTask task = new MainActivity.DownloadWebPageTask(); task.execute(new String[]{}); }

 

]]>
Код прогноза погоды в JSON формате https://ot7.ru/2016/04/02/%d0%ba%d0%be%d0%b4-%d0%bf%d1%80%d0%be%d0%b3%d0%bd%d0%be%d0%b7%d0%b0-%d0%bf%d0%be%d0%b3%d0%be%d0%b4%d1%8b-%d0%b2-json-%d1%84%d0%be%d1%80%d0%bc%d0%b0%d1%82%d0%b5/ Sat, 02 Apr 2016 10:14:46 +0000 http://manuscript.ikurs.kz/?p=1491 { "query": { "count": 1, "created": "2016-04-02T10:13:17Z", "lang": "ru-RU", "results": { "channel": { "units": { "distance": "mi", "pressure": "in", "speed": "mph", "temperature": "F" }, "title": "Yahoo! Weather - Qaraghandy, KZ", "link": "http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-20070178/", "description": "Yahoo! Weather for Qaraghandy, KZ", "language": "en-us", "lastBuildDate": "Sat, 02 Apr 2016 04:13 PM ALMT", "ttl": "60", "location": { "city": "Qaraghandy", "country": "Kazakhstan", "region": " KZ" }, "wind": { "chill": "51", "direction": "270", "speed": "21" }, "atmosphere": { "humidity": "57", "pressure": "1017.5", "rising": "2", "visibility": "0.0" }, "astronomy": { "sunrise": "6:57 am", "sunset": "7:53 pm" }, "image": { "title": "Yahoo! Weather", "width": "142", "height": "18", "link": "http://weather.yahoo.com", "url": "http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif" }, "item": { "title": "Conditions for Qaraghandy, KZ at 03:00 PM ALMT", "lat": "48.680752", "long": "70.439629", "link": "http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-20070178/", "pubDate": "Sat, 02 Apr 2016 03:00 PM ALMT", "condition": { "code": "28", "date": "Sat, 02 Apr 2016 03:00 PM ALMT", "temp": "51", "text": "Mostly Cloudy" }, "forecast": [ { "code": "12", "date": "02 Apr 2016", "day": "Sat", "high": "51", "low": "39", "text": "Rain" }, { "code": "30", "date": "03 Apr 2016", "day": "Sun", "high": "58", "low": "39", "text": "Partly Cloudy" }, { "code": "28", "date": "04 Apr 2016", "day": "Mon", "high": "57", "low": "40", "text": "Mostly Cloudy" }, { "code": "28", "date": "05 Apr 2016", "day": "Tue", "high": "61", "low": "35", "text": "Mostly Cloudy" }, { "code": "30", "date": "06 Apr 2016", "day": "Wed", "high": "56", "low": "35", "text": "Partly Cloudy" }, { "code": "24", "date": "07 Apr 2016", "day": "Thu", "high": "55", "low": "32", "text": "Windy" }, { "code": "24", "date": "08 Apr 2016", "day": "Fri", "high": "55", "low": "35", "text": "Windy" }, { "code": "39", "date": "09 Apr 2016", "day": "Sat", "high": "54", "low": "35", "text": "Scattered Showers" }, { "code": "30", "date": "10 Apr 2016", "day": "Sun", "high": "57", "low": "37", "text": "Partly Cloudy" }, { "code": "30", "date": "11 Apr 2016", "day": "Mon", "high": "59", "low": "38", "text": "Partly Cloudy" } ], "description": "<![CDATA[<img src=\"http://l.yimg.com/a/i/us/we/52/28.gif\"/>\n<BR />\n<b>Current Conditions:</b>\n<BR />Mostly Cloudy\n<BR />\n<BR />\n<b>Forecast:</b>\n<BR /> Sat - Rain. High: 51Low: 39\n<BR /> Sun - Partly Cloudy. High: 58Low: 39\n<BR /> Mon - Mostly Cloudy. High: 57Low: 40\n<BR /> Tue - Mostly Cloudy. High: 61Low: 35\n<BR /> Wed - Partly Cloudy. High: 56Low: 35\n<BR />\n<BR />\n<a href=\"http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-20070178/\">Full Forecast at Yahoo! Weather</a>\n<BR />\n<BR />\n(provided by <a href=\"http://www.weather.com\" >The Weather Channel</a>)\n<BR />\n]]>", "guid": { "isPermaLink": "false" } } } } } }

 

]]>
Асинхронная загрузка веб страницы в Android Studio https://ot7.ru/2016/02/23/%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d0%b0%d1%8f-%d0%b7%d0%b0%d0%b3%d1%80%d1%83%d0%b7%d0%ba%d0%b0-%d0%b2%d0%b5%d0%b1-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86%d1%8b-%d0%b2-android-s/ Tue, 23 Feb 2016 13:42:27 +0000 http://manuscript.ikurs.kz/?p=1446 private class DownloadWebPageTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... urls) { String response = ""; for (String url : urls) { DefaultHttpClient client = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url); try { HttpResponse execute = client.execute(httpGet); InputStream content = execute.getEntity().getContent(); BufferedReader buffer = new BufferedReader( new InputStreamReader(content)); String s = ""; while ((s = buffer.readLine()) != null) { response += s; } } catch (Exception e) { e.printStackTrace(); } } return response; } @Override protected void onPostExecute(String result) { textView.setText(Html.fromHtml(result)); } } public void readWebpage(View view) { DownloadWebPageTask task = new DownloadWebPageTask(); task.execute(new String[] { "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22karagandy%22)&format=xml&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys" }); } ]]> Коды на прогноз погоды от Yahoo https://ot7.ru/2016/02/23/%d0%ba%d0%be%d0%b4%d1%8b-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%b3%d0%bd%d0%be%d0%b7-%d0%bf%d0%be%d0%b3%d0%be%d0%b4%d1%8b-%d0%be%d1%82-yahoo/ Tue, 23 Feb 2016 10:29:22 +0000 http://manuscript.ikurs.kz/?p=1444 Прогноз погоды в XML JSON форматах

https://developer.yahoo.com/weather/

0-tornado-Торнадо-5
1-tropical storm-Шторм-7
2-hurricane-Ураган-5
3-severe thunderstorms-Сильная гроза-7
4-thunderstorms-Сильный шторм-7
5-mixed rain and snow-Снег с дождем-5
6-mixed rain and sleet-Дождь и мокрый снег-4
7-mixed snow and sleet-Снег и мокрый снег-6
8-freezing drizzle-Изморозь-6
9-drizzle-Изморозь-6
10-freezing rain-град-4
11-showers-Ливень-4
12-showers-Ливень-4
13-snow flurries-Снег-6
14-light snow showers-Снег-6
15-blowing snow-Снег-6
16-snow-Снег-6
17-hail-Град-5
18-sleet-Мокрый снег-6
19-dust-Пыль-2
20-foggy-Туман-2
21-haze-Мгла-2
22-smoky-Дымка-2
23-blustery-Ветренно-2
24-windy-Ветренно-2
25-cold-Холодно-6
26-cloudy-Облачно-1
27-mostly cloudy (night)-Облачно-9
28-mostly cloudy (day)-Облачно-1
29-partly cloudy (night)-Частично облачно-9
30-partly cloudy (day)-Частично облачно-3
31-clear (night)-Чистое небо-8
32-sunny-Солнечно-0
33-fair (night)-Ясно-8
34-fair (day)-Ясно-0
35-mixed rain and hail-Дождь и град-5
36-hot-Жарко-0
37-isolated thunderstorms-Шторм-7
38-scattered thunderstorms-Шторм-7
39-scattered thunderstorms-Шторм-7
40-scattered showers-Дождь-5
41-heavy snow-Снег-6
42-scattered snow showers-Снег-6
43-heavy snow-Снег-6
44-partly cloudy-Частично облачно-3
45-thundershowers-Дождь-5
46-snow showers-Дождь-5
47-isolated thundershowers-Дождь-5
3200-not available-Прогноз отсутствует-0

]]>
Меню XML для пятнашек https://ot7.ru/2016/02/18/%d0%bc%d0%b5%d0%bd%d1%8e-xml-%d0%b4%d0%bb%d1%8f-%d0%bf%d1%8f%d1%82%d0%bd%d0%b0%d1%88%d0%b5%d0%ba/ Thu, 18 Feb 2016 14:59:29 +0000 http://manuscript.ikurs.kz/?p=1442 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:id="@+id/action_menu" android:title="menu"> <menu > <item android:id="@+id/menu_item1" android:title="Новая игра"></item> <item android:id="@+id/menu_item2" android:title="Выход"></item> </menu> </item> </menu> ]]> Пятнашки на Андроид последняя версия https://ot7.ru/2016/02/18/%d0%bf%d1%8f%d1%82%d0%bd%d0%b0%d1%88%d0%ba%d0%b8-%d0%bd%d0%b0-%d0%b0%d0%bd%d0%b4%d1%80%d0%be%d0%b8%d0%b4-%d0%bf%d0%be%d1%81%d0%bb%d0%b5%d0%b4%d0%bd%d1%8f%d1%8f-%d0%b2%d0%b5%d1%80%d1%81%d0%b8%d1%8f/ Thu, 18 Feb 2016 14:59:01 +0000 http://manuscript.ikurs.kz/?p=1440 package sunshine.ikurs.kz.myapplication; import android.net.Uri; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.google.android.gms.appindexing.Action; import com.google.android.gms.appindexing.AppIndex; import com.google.android.gms.common.api.GoogleApiClient; import java.util.Random; public class MainActivity extends AppCompatActivity { //Объявляем массив кнопок Button[] B; /** * ATTENTION: This was auto-generated to implement the App Indexing API. * See https://g.co/AppIndexing/AndroidStudio for more information. */ private GoogleApiClient client; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu15, menu); return true; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Создаем массив кнопок. B = new Button[16]; //Записываем кнопки в массив. B[0] = (Button) findViewById(R.id.button1); B[1] = (Button) findViewById(R.id.button2); B[2] = (Button) findViewById(R.id.button3); B[3] = (Button) findViewById(R.id.button4); B[4] = (Button) findViewById(R.id.button5); B[5] = (Button) findViewById(R.id.button6); B[6] = (Button) findViewById(R.id.button7); B[7] = (Button) findViewById(R.id.button8); B[8] = (Button) findViewById(R.id.button9); B[9] = (Button) findViewById(R.id.button10); B[10] = (Button) findViewById(R.id.button11); B[11] = (Button) findViewById(R.id.button12); B[12] = (Button) findViewById(R.id.button13); B[13] = (Button) findViewById(R.id.button14); B[14] = (Button) findViewById(R.id.button15); B[15] = (Button) findViewById(R.id.button16); // ATTENTION: This was auto-generated to implement the App Indexing API. // See https://g.co/AppIndexing/AndroidStudio for more information. client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); } private void showMsg(String msg) { Toast toast = Toast.makeText(this, msg, Toast.LENGTH_LONG); toast.show(); } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getTitle().toString()) { case "Новая игра": showMsg("Новая игра"); Random rand = new Random(); int n; for (int i=0;i<500;i++) { n = rand.nextInt(16); buttonOnClick(B[n]); } break; case "Выход": finish(); System.exit(0); break; } return super.onOptionsItemSelected(item); } //Функция смены кнопок Swap(B[2],B[3]); public void Swap(Button B1, Button B2) { if (B2.getVisibility() == View.INVISIBLE) { B2.setVisibility(View.VISIBLE); B1.setVisibility(View.INVISIBLE); String Tmp = B1.getText().toString(); B1.setText(B2.getText()); B2.setText(Tmp); } } public void buttonOnClick(View V) { //Получаем текущую кнопку по которой кликнули Button current = (Button) V; //Получаем номер кнопки из тега кторый задали в XML файле в текстовом режиме редактирования String N = current.getTag().toString(); //преобразуем тег из строки в целое число int n = Integer.parseInt(N) - 1; //рассчитываем номер строки путем целочисленного деления int y = n / 4; //вычисляем столбец int x = n; if (n >= 12) x = n - 12; else if (n >= 8) x = n - 8; else if (n >= 4) x = n - 4; //Рассчитываем номер кнопки сверху снизу слева справа и записываем в переменные //NT NL NR NB NC (Top Left Right Bottom Current) int nc = y * 4 + x; int nt = (y - 1) * 4 + x; int nb = (y + 1) * 4 + x; int nl = y * 4 + x - 1; int nr = y * 4 + x + 1; //Проверяем существование кнопки слева справа снизу сверху //Если существует то пытаемся поменять кнопки местами if (y - 1 >= 0) Swap(B[nc], B[nt]); if (y + 1 < 4) Swap(B[nc], B[nb]); if (x - 1 >= 0) Swap(B[nc], B[nl]); if (x + 1 < 4) Swap(B[nc], B[nr]); int cnt=0; for (int i=0;i<16;i++) { if (B[i].getText().equals(Integer.toString(i+1))) cnt++; } if (cnt == 16) showMsg("Вы выиграли"); } } ]]> Код XML для пятнашек на Андроид https://ot7.ru/2016/02/16/%d0%ba%d0%be%d0%b4-xml-%d0%b4%d0%bb%d1%8f-%d0%bf%d1%8f%d1%82%d0%bd%d0%b0%d1%88%d0%b5%d0%ba-%d0%bd%d0%b0-%d0%b0%d0%bd%d0%b4%d1%80%d0%be%d0%b8%d0%b4/ Tue, 16 Feb 2016 14:42:17 +0000 http://manuscript.ikurs.kz/?p=1431 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="sunshine.ikurs.kz.myapplication.MainActivity"> <TableLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true" android:layout_centerHorizontal="true"> <TableRow android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight=".25"> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="1" android:tag="1" android:id="@+id/button1" android:layout_column="0" android:layout_weight=".25" android:onClick="buttonOnClick" android:textSize="26sp" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="2" android:tag="2" android:id="@+id/button2" android:layout_column="1" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="3" android:tag="3" android:id="@+id/button3" android:layout_column="2" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="4" android:tag="4" android:id="@+id/button4" android:layout_column="3" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight=".25"> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="5" android:tag="5" android:id="@+id/button5" android:layout_column="0" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="6" android:tag="6" android:id="@+id/button6" android:layout_column="1" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="7" android:tag="7" android:id="@+id/button7" android:layout_column="2" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="8" android:tag="8" android:id="@+id/button8" android:layout_column="3" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight=".25"> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="9" android:tag="9" android:id="@+id/button9" android:layout_column="0" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="10" android:tag="10" android:id="@+id/button10" android:layout_column="1" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="11" android:tag="11" android:id="@+id/button11" android:layout_column="2" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="12" android:tag="12" android:id="@+id/button12" android:layout_column="3" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight=".25"> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="13" android:tag="13" android:id="@+id/button13" android:layout_column="0" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="14" android:tag="14" android:id="@+id/button14" android:layout_column="1" android:layout_weight=".25" android:textSize="26sp" android:onClick="buttonOnClick" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="15" android:tag="15" android:id="@+id/button15" android:layout_column="2" android:layout_weight=".25" android:onClick="buttonOnClick" android:textSize="27sp" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="16" android:tag="16" android:id="@+id/button16" android:layout_column="3" android:layout_weight=".25" android:elegantTextHeight="false" android:visibility="invisible" android:onClick="buttonOnClick" android:textSize="26sp" /> </TableRow> </TableLayout> </RelativeLayout> ]]> Код для пятнашек на Андроид https://ot7.ru/2016/02/16/%d0%ba%d0%be%d0%b4-%d0%b4%d0%bb%d1%8f-%d0%bf%d1%8f%d1%82%d0%bd%d0%b0%d1%88%d0%b5%d0%ba-%d0%bd%d0%b0-%d0%b0%d0%bd%d0%b4%d1%80%d0%be%d0%b8%d0%b4/ Tue, 16 Feb 2016 14:35:55 +0000 http://manuscript.ikurs.kz/?p=1429 package sunshine.ikurs.kz.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { //Объявляем массив кнопок Button [] B; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Создаем массив кнопок. B=new Button[16]; //Записываем кнопки в массив. B[0]=(Button)findViewById(R.id.button1); B[1]=(Button)findViewById(R.id.button2); B[2]=(Button)findViewById(R.id.button3); B[3]=(Button)findViewById(R.id.button4); B[4]=(Button)findViewById(R.id.button5); B[5]=(Button)findViewById(R.id.button6); B[6]=(Button)findViewById(R.id.button7); B[7]=(Button)findViewById(R.id.button8); B[8]=(Button)findViewById(R.id.button9); B[9]=(Button)findViewById(R.id.button10); B[10]=(Button)findViewById(R.id.button11); B[11]=(Button)findViewById(R.id.button12); B[12]=(Button)findViewById(R.id.button13); B[13]=(Button)findViewById(R.id.button14); B[14]=(Button)findViewById(R.id.button15); B[15]=(Button)findViewById(R.id.button16); } //Функция смены кнопок Swap(B[2],B[3]); public void Swap(Button B1, Button B2) { if (B2.getVisibility() == View.INVISIBLE) { B2.setVisibility(View.VISIBLE); B1.setVisibility(View.INVISIBLE); String Tmp = B1.getText().toString(); B1.setText(B2.getText()); B2.setText(Tmp); } } public void buttonOnClick(View V) { //Получаем текущую кнопку по которой кликнули Button current = (Button)V; //Получаем номер кнопки из тега кторый задали в XML файле в текстовом режиме редактирования String N=current.getTag().toString(); //преобразуем тег из строки в целое число int n = Integer.parseInt(N)-1; //рассчитываем номер строки путем целочисленного деления int y = n / 4; //вычисляем столбец int x = n; if (n >= 12) x = n - 12; else if (n >= 8) x = n - 8; else if (n >= 4) x = n - 4; //Рассчитываем номер кнопки сверху снизу слева справа и записываем в переменные //NT NL NR NB NC (Top Left Right Bottom Current) int nc = y * 4 + x; int nt = (y - 1) * 4 + x; int nb = (y + 1) * 4 + x; int nl= y * 4 + x-1; int nr = y * 4 + x + 1; //Проверяем существование кнопки слева справа снизу сверху //Если существует то пытаемся поменять кнопки местами if (y - 1 >= 0) Swap(B[nc], B[nt]); if (y + 1 < 4) Swap(B[nc], B[nb]); if (x - 1 >= 0) Swap(B[nc], B[nl]); if (x + 1 < 4) Swap(B[nc], B[nr]); } } ]]>