Рубрика: Android

  • Загрузка данных на сервер в асинхронном режиме Android Studio

    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 Проект по работе с картой. Геолокация.

    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

    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 формате

    {
     "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

    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

    Прогноз погоды в 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 для пятнашек

    <?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>
  • Пятнашки на Андроид последняя версия

    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 для пятнашек на Андроид

    <?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>
  • Код для пятнашек на Андроид

    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]);
        }
    
    
    }
Яндекс.Метрика