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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
geck
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 2
#1

Обработка результата POST-запроса в Android - Программирование Android

18.11.2015, 13:26. Просмотров 347. Ответов 2

Приветствую, уважаемые программисты.
Изучаю программирование на Android. Пытаюсь сделать простенькое клиент-серверное приложение.
Задачу следующая - с android-а на сервер отправляется post запрос с данными для регистрации пользователя, сервер в ответ отправляет "yes" или "no", в зависимости от того произошла регистрация или нет.
Веб-сервер - Apache/2.4.17 (Win64) PHP/5.6.15.
Клиент - эмулятор Android API 15.

Код на Андроид:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
private void insertToDatabase(String name, String pass, String firs, String last, String uinf){
        class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... params) {
                String paramUsername = params[0];
                String paramPassword = params[1];
                String paramFirstName = params[2];
                String paramLastName = params[3];
                String paramUserInfo = params[4];
 
 
                String name = editTextUsername.getText().toString();
                String pass = editTextPassword.getText().toString();
                String firs = editTextFirstName.getText().toString();
                String last = editTextLastName.getText().toString();
                String uinf = editTextUserInfo.getText().toString();
 
 
                HashMap<String, String> postDataParams = new HashMap<String, String>();
                postDataParams.put("username", name);
                postDataParams.put("password", pass);
                postDataParams.put("first_name", firs);
                postDataParams.put("last_name", last);
                postDataParams.put("user_info", uinf);
 
                URL url;
                String response = "";
                try {
                    url = new URL("http://mysyte.ru/test/create-new-user.php");
 
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setReadTimeout(15000);
                    conn.setConnectTimeout(15000);
                    conn.setRequestMethod("POST");
                    conn.setDoInput(true);
                    conn.setDoOutput(true);
 
 
                    OutputStream os = conn.getOutputStream();
                    BufferedWriter writer = new BufferedWriter(
                            new OutputStreamWriter(os, "UTF-8"));
                    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="";
 
                        throw new HttpException(responseCode+"");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
 
                mAnswer = response;
                return mAnswer;
            }
 
            @Override
            protected void onPostExecute(String result) {
                super.onPostExecute(mAnswer);
 
                Toast.makeText(getApplicationContext(), mAnswer, Toast.LENGTH_LONG).show();
 
                if (mAnswer == "no")
                {Toast.makeText(getApplicationContext(),"Не получилось, попробуйте другой логин", Toast.LENGTH_SHORT).show();}
                else if (mAnswer == "yes")
                {Toast.makeText(getApplicationContext(),"Вы зарегистрированы", Toast.LENGTH_SHORT).show();                    
 
                    SharedPreferences.Editor editor = mSettings.edit();
                    editor.putString(APP_PREFERENCES_USERNAME, mUsername);
                    editor.putString(APP_PREFERENCES_PASSWORD, mPassword);
                    editor.putString(APP_PREFERENCES_FIRST_NAME, mFirstName);
                    editor.putString(APP_PREFERENCES_LAST_NAME, mLastName);
                    editor.putString(APP_PREFERENCES_USER_INFO, mUserInfo);
                    editor.apply();
 
 
                    Intent intent_inbox = new Intent(RegistrationActivity.this, AboutActivity.class);
                    startActivity(intent_inbox);
                }
            }
        }
        SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
        sendPostReqAsyncTask.execute(name, pass, firs, last, uinf);
    }
Код на PHP
PHP
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
<?php
  define('HOST','localhost');
  define('USER','root');
  define('PASS','000000');
  define('DB','test_db');
  $con = mysqli_connect(HOST,USER,PASS,DB);
 
  $username = $_POST['username'];
  $password = $_POST['password'];
  $first_name = $_POST['first_name'];
  $last_name = $_POST['last_name'];
  $user_info = $_POST['user_info'];
 
  $sql = "insert into userlist (username, user_password, user_first_name, user_last_name, user_info) 
            values ('$username','$password', '$first_name', '$last_name', '$user_info')";
  
 
  if(mysqli_query($con,$sql)){
    echo 'yes';  
  }
  else{
    echo 'no';
   }
    
  mysqli_close($con);
?>
По задумке приложение получив ответ ("yes" или "no") сначала выводит этот ответ в виде всплывающего сообщения, потом обрабатывает полученный ответ.
Так вот проблема в том, что ответ приложение выводит, но не обрабатывает.
С БД все в порядке - данные заносятся исправно. Проблема именно в обработке ответа на стороне клиента.
Если я правильно понимаю, это связано с кодировками, т.е. веб-сервер отправляет ответ в UTF-8, а в Java String-и в UTF-16 или UCS-2(точно не знаю). Пытался поменять кодировку файла create-new-user.php на UCS-2 в Notepad++ - в этом случае отправка данных вообще не работает и во всплывающем сообщении отображается содержимое всего файла(с двумя непонятными символами перед текстом).
Кто уже сталкивался с проблемой или знает как решить - подскажите нубу
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2015, 13:26     Обработка результата POST-запроса в Android
Посмотрите здесь:
Отправка Post запроса в Android предложении Android
Android Незаметный перехват результата USSD запроса
Отправка POST запроса Android
Android Отправка POST запроса
Отправка POST запроса Android
ANDROID и POST запрос Android
Android HTTP post android
Отправка USSD запроса и чтение его результата в Service Basic4Android
Не работает отправка POST запроса Android
Отправка POST запроса серверу Android
Android Android query и HTTP Post
Передать JSON в теле POST запроса? Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.11.2015, 13:58     Обработка результата POST-запроса в Android #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от geck Посмотреть сообщение
if (mAnswer == "no")
Java
1
if ("no".equalsIgnoreCase(mAnswer))
не сравниваются объекты в java через ==
geck
0 / 0 / 0
Регистрация: 18.11.2015
Сообщений: 2
18.11.2015, 14:16  [ТС]     Обработка результата POST-запроса в Android #3
Спасибо огромное, все заработало
Даже не верится, что было так просто
Yandex
Объявления
18.11.2015, 14:16     Обработка результата POST-запроса в Android
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru