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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.91
8VAid8
14 / 14 / 2
Регистрация: 21.04.2012
Сообщений: 190
#1

Удалённая база данных MySQL, php, android - Программирование Android

10.05.2013, 13:51. Просмотров 7298. Ответов 43
Метки нет (Все метки)

Имеется БД MySQL с таблицей:
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
== Структура таблицы Feld
 
|------
|Поле|Тип|Null|По умолчанию
|------
|//**FID**//|int(11)|Нет|
|**login**|varchar(20)|Нет|
|password|varchar(20)|Нет|
|Fname|varchar(20)|Нет|
|Sname|varchar(20)|Нет|
|Lname|varchar(20)|Нет|
|Fphone|bigint(20)|Нет|
,
скрипт PHP:
PHP
1
2
3
4
5
6
7
8
9
<?php
mysql_connect("bd","login","password");
mysql_select_db("medplus8");
mysql_set_charset( 'utf8' );
$sql=mysql_query("select * from Feld");
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print json_fix_cyr(json_encode(array($output)));
mysql_close();?>
и код java:
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package com.example.med;
 
 
 
 
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.Activity;
import android.net.ParseException;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnClickListener{
     Button button1;
     TextView label;
     MyTask mt;
        
        
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        button1 = (Button) findViewById(R.id.buttonChange);
        button1.setOnClickListener(this);
        
        label = (TextView) findViewById(R.id.label);
    }     
  //----------------------------------------------
    @Override
    public void onClick(View v) {
      switch (v.getId()) {
      case R.id.buttonChange:{
        // TODO Call second activity
         /* Intent intent = new Intent(this, Base.class);
          startActivity(intent);*/
//-------------
        // Здесь трудоемкие задачи переносятся в дочерний поток.
          mt = new MyTask();
            mt.execute();
//---------------------
          
      }break;
      default:
        break;}
      }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    //-------------------------
    public class MyTask extends AsyncTask<Void, Void, Void> {
        //paring data
                int fd_id;
                String fd_login = null;
                String fd_password = null;
                String fd_fname = null;
                String fd_sname = null;
                String fd_lname = null;
                int fd_phone;
                //----------
                JSONArray jArray;
                 String result = null;
                 InputStream is = null;
                 StringBuilder sb=null;
                 //------
         @Override
            protected void onPostExecute(Void result) {
              super.onPostExecute(result);
              //label.setText(fd_id);
    }
        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub
                // TODO Auto-generated method stub
             ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                //http post
                try{
                     HttpClient httpclient = new DefaultHttpClient();
                     HttpPost httppost = new HttpPost("http://medplus.hut4.ru/feld.php");
                     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                     HttpResponse response = httpclient.execute(httppost);
                     HttpEntity entity = response.getEntity();
                     is = entity.getContent();
                     }
                catch(Exception e)
                {
                         Log.e("log_tag", "Error in http connection"+e.toString());
              }
                //convert response to string
                try{
                      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf8"),8);
                       sb = new StringBuilder();
                       sb.append(reader.readLine() + "\n");
 
                       String line="0";
                       while ((line = reader.readLine()) != null) 
                       {
                                      sb.append(line + "\n");
                       }
                        is.close();
                        result=sb.toString();
                   }
                   catch(Exception e)
                {
                              Log.e("log_tag", "Error converting result "+e.toString());
              }
                try{
                      jArray = new JSONArray(result);
                      JSONObject json_data=null;
                      for(int i=0;i<jArray.length();i++)
                      {
                             json_data = jArray.getJSONObject(i);
                             fd_id=json_data.getInt("FID");
                             fd_login=json_data.getString("login");
                             fd_password=json_data.getString("password");
                             fd_fname=json_data.getString("Fname");
                             fd_sname=json_data.getString("Sname");
                             fd_lname=json_data.getString("Lname");
                             fd_phone=json_data.getInt("Fphone");
                      }
                    }
                      catch(JSONException e1)
                      {
                          Toast.makeText(getBaseContext(), "No City Found" ,Toast.LENGTH_LONG).show();
                      }
                      catch (ParseException e1)
                    {
                            e1.printStackTrace();
                    }
            return null;
        }
    //--------------------------
    }
 }
При работе с предыдущей таблицей, состоящей из 2- столбцов работало нормально, а с этой(появилось использование русских букв), LogCat выдаёт список ошибок, связаных с AsyncTask.
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
05-10 09:32:32.889: D/dalvikvm(969): GC_FOR_ALLOC freed 61K, 8% free 2452K/2660K, paused 688ms, total 691ms
05-10 09:32:33.349: I/dalvikvm-heap(969): Grow heap (frag case) to 15.191MB for 13271056-byte allocation
05-10 09:32:33.460: D/dalvikvm(969): GC_FOR_ALLOC freed 2K, 2% free 15410K/15624K, paused 109ms, total 109ms
05-10 09:32:33.679: D/dalvikvm(969): GC_CONCURRENT freed <1K, 2% free 15410K/15624K, paused 5ms+42ms, total 219ms
05-10 09:32:35.349: D/dalvikvm(969): GC_FOR_ALLOC freed <1K, 2% free 15410K/15624K, paused 57ms, total 57ms
05-10 09:32:35.449: I/dalvikvm-heap(969): Grow heap (frag case) to 20.814MB for 5898256-byte allocation
05-10 09:32:35.602: D/dalvikvm(969): GC_CONCURRENT freed 0K, 2% free 21170K/21388K, paused 20ms+21ms, total 156ms
05-10 09:32:37.220: D/gralloc_goldfish(969): Emulator without GPU emulation detected.
05-10 09:32:54.910: I/Choreographer(969): Skipped 68 frames!  The application may be doing too much work on its main thread.
05-10 09:32:57.860: W/dalvikvm(969): threadid=13: thread exiting with uncaught exception (group=0x40a71930)
05-10 09:32:57.900: E/AndroidRuntime(969): FATAL EXCEPTION: AsyncTask #3
05-10 09:32:57.900: E/AndroidRuntime(969): java.lang.RuntimeException: An error occured while executing doInBackground()
05-10 09:32:57.900: E/AndroidRuntime(969):  at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-10 09:32:57.900: E/AndroidRuntime(969):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
05-10 09:32:57.900: E/AndroidRuntime(969):  at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-10 09:32:57.900: E/AndroidRuntime(969):  at java.util.concurrent.FutureTask.run(FutureTask.java:239)
05-10 09:32:57.900: E/AndroidRuntime(969):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-10 09:32:57.900: E/AndroidRuntime(969):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-10 09:32:57.900: E/AndroidRuntime(969):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-10 09:32:57.900: E/AndroidRuntime(969):  at java.lang.Thread.run(Thread.java:856)
05-10 09:32:57.900: E/AndroidRuntime(969): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
05-10 09:32:57.900: E/AndroidRuntime(969):  at android.os.Handler.<init>(Handler.java:197)
05-10 09:32:57.900: E/AndroidRuntime(969):  at android.os.Handler.<init>(Handler.java:111)
05-10 09:32:57.900: E/AndroidRuntime(969):  at android.widget.Toast$TN.<init>(Toast.java:324)
05-10 09:32:57.900: E/AndroidRuntime(969):  at android.widget.Toast.<init>(Toast.java:91)
05-10 09:32:57.900: E/AndroidRuntime(969):  at android.widget.Toast.makeText(Toast.java:238)
05-10 09:32:57.900: E/AndroidRuntime(969):  at com.example.med.MainActivity$MyTask.doInBackground(MainActivity.java:150)
05-10 09:32:57.900: E/AndroidRuntime(969):  at com.example.med.MainActivity$MyTask.doInBackground(MainActivity.java:1)
05-10 09:32:57.900: E/AndroidRuntime(969):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-10 09:32:57.900: E/AndroidRuntime(969):  at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-10 09:32:57.900: E/AndroidRuntime(969):  ... 4 more
В чём проблемы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.05.2013, 13:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалённая база данных MySQL, php, android (Программирование Android):

Android и удалённая MySQL - Программирование Android
Помогите разобраться, как вообще подключатся и работать с удалённой бд mysql? Почитал на форуме, погуглил, мало инфы, либо не совсем...

Android+php+MySQL - Программирование Android
Я с помощью php-скрипта получаю данные код &quot;приема&quot; такой JSONObject json = jParser.makeHttpRequest(url_all_students, &quot;GET&quot;,...

Общая база для android и ios. Реализация сервера на php - Программирование Android
Здравствуйте. Помогите пожалуйста. Мы с другом решили сделать приложение. Одно на android, другое на ios. База приложения будет...

База данных на Android - Программирование Android
Ребят,в java впервые влез, да и под Android впервые решил попробовать написать. Есть вопрос,как сделать чтобы при авторизации, шел запрос...

Делаю удаленную базу Android-Php-MySql - Программирование Android
Здравствуйте! Я нашел эти кода из уроков devcolibri.com db_connect.php &lt;?php class DB_CONNECT { function...

База данных в Android приложении - Программирование Android
Такая проблема, у меня есть база в MySQL, а в приложении нужно, чтобы база была в формате Sqlite, никак не получается конвертировать ее,...

43
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.05.2013, 02:07 #31
у вас хост вначале формируется с id 0 и так и используется.

Добавлено через 1 минуту
Java
1
+String.valueOf(userId)
поместите в
Java
1
new HttpPost
Java
1
HttpPost httppost = new HttpPost(HOST+String.valueOf(userId));
Добавлено через 5 минут
плюс в ответ приходит кусок html'a вместе с json.
1
8VAid8
14 / 14 / 2
Регистрация: 21.04.2012
Сообщений: 190
17.05.2013, 02:13  [ТС] #32
Почему приходить html? Вот код скрипта:
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
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
<?php
mysql_connect("bd","login","password"); //логинимся
mysql_select_db("medplus");                     // выбираем бд
$date=date('d.m.Y. H-i-s');                            //время сервера
 
mysql_set_charset( 'utf8' );                     //выбор кодировки
 
//$output_time=array ('TIME'=>$date);             //добавление времени к json
//$output[]=$output_time;                          //добавление времени
$sql=mysql_query("select * from Feld");          // извлечение данных из бд
while($row=mysql_fetch_assoc($sql))              //
$output[]=$row;                                  //запись данных в json
 
print json_fix_cyr(json_encode($output));        //печать
if (isset($_GET['updatetime']))
{
$id = $_GET['id'];
$sqlin=mysql_query("UPDATE `medplus`.`Feld` SET `TIME_LAST_LOGIN` = '".$date."' WHERE `Feld`.`FID` =".$id.";"); 
}
mysql_close();
 
 
function json_fix_cyr($json_str) { 
 $cyr_chars = array ( 
 '\u0430' => 'а', '\u0410' => 'А', 
 '\u0431' => 'б', '\u0411' => 'Б', 
 '\u0432' => 'в', '\u0412' => 'В', 
 '\u0433' => 'г', '\u0413' => 'Г', 
 '\u0434' => 'д', '\u0414' => 'Д', 
 '\u0435' => 'е', '\u0415' => 'Е', 
 '\u0451' => 'ё', '\u0401' => 'Ё', 
 '\u0436' => 'ж', '\u0416' => 'Ж', 
 '\u0437' => 'з', '\u0417' => 'З', 
 '\u0438' => 'и', '\u0418' => 'И', 
 '\u0439' => 'й', '\u0419' => 'Й', 
 '\u043a' => 'к', '\u041a' => 'К', 
 '\u043b' => 'л', '\u041b' => 'Л', 
 '\u043c' => 'м', '\u041c' => 'М', 
 '\u043d' => 'н', '\u041d' => 'Н', 
 '\u043e' => 'о', '\u041e' => 'О', 
 '\u043f' => 'п', '\u041f' => 'П', 
 '\u0440' => 'р', '\u0420' => 'Р', 
 '\u0441' => 'с', '\u0421' => 'С', 
 '\u0442' => 'т', '\u0422' => 'Т', 
 '\u0443' => 'у', '\u0423' => 'У', 
 '\u0444' => 'ф', '\u0424' => 'Ф', 
 '\u0445' => 'х', '\u0425' => 'Х', 
 '\u0446' => 'ц', '\u0426' => 'Ц', 
 '\u0447' => 'ч', '\u0427' => 'Ч', 
 '\u0448' => 'ш', '\u0428' => 'Ш', 
 '\u0449' => 'щ', '\u0429' => 'Щ', 
 '\u044a' => 'ъ', '\u042a' => 'Ъ', 
 '\u044b' => 'ы', '\u042b' => 'Ы', 
 '\u044c' => 'ь', '\u042c' => 'Ь', 
 '\u044d' => 'э', '\u042d' => 'Э', 
 '\u044e' => 'ю', '\u042e' => 'Ю', 
 '\u044f' => 'я', '\u042f' => 'Я', 
 
 '\r' => '', 
 '\n' => '<br />', 
 '\t' => '' 
 ); 
 
 foreach ($cyr_chars as $cyr_char_key => $cyr_char) { 
 $json_str = str_replace($cyr_char_key, $cyr_char, $json_str); 
 } 
 return $json_str; 
}
?>
Ещё в программу не возвращается значение времени с сервера.
Java
1
2
3
4
5
6
7
8
9
  try {
                jsonArray = new JSONArray(webData);
                JSONObject jsonData = null; 
                for (int i = 0; i < jsonArray.length(); i++) {
                    jsonData = jsonArray.getJSONObject(i);
                    if(i==userId)
                    {
                    time_last_login= jsonData.getString(KEY_TIME_LOGIN);
                    }
Java
1
2
3
4
5
6
7
8
9
 @Override
        protected void onPostExecute(Void result) {
            if (exception != null) {
                Toast.makeText(Base.this,
                        "Error while getting data from web server",
                        Toast.LENGTH_SHORT).show();
            }
            textViewLastLogin.setText(time_last_login);
        }
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.05.2013, 02:21 #33
Цитата Сообщение от 8VAid8 Посмотреть сообщение
Почему приходить html? Вот код скрипта:
я не пхпешник, спросите в разделе пхп.


Цитата Сообщение от 8VAid8 Посмотреть сообщение
Ещё в программу не возвращается значение времени с сервера.
просто сервер отправляет пустую строчку там где должно быть время.

Добавлено через 4 минуты
точнее вы не с того аккаунта вытягиваете данные, вы не проверяете значение FID а просто выводите по индексу.
у вас id=1 а это второй элемент масива, а в второго аккаунта "TIME_LAST_LOGIN":""
1
8VAid8
14 / 14 / 2
Регистрация: 21.04.2012
Сообщений: 190
17.05.2013, 02:28  [ТС] #34
Сменил на
Java
1
2
3
4
if(jsonData.getInt(KEY_ID)==userId)
                    {
                    time_last_login= jsonData.getString(KEY_TIME_LOGIN);
                    }
Работает.
А то что в ответ приходит кусок html'a вместе с json, может создать какие-либо проблемы?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.05.2013, 02:36 #35
ну, при парсинге json'a он отбрасывается, но лучше уж довести все до ума.
0
8VAid8
14 / 14 / 2
Регистрация: 21.04.2012
Сообщений: 190
17.05.2013, 19:43  [ТС] #36
Как создать ArrayAdapter в onPostExecute?
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
package com.example.med;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.Activity;
import android.net.ParseException;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
 
public class MedicActivity extends Activity {
    private static final String TAG = MedicActivity.class.getName();
    
    private static final String HOSTusers = "http://medplus.hut4.ru/feld.php";
    
    private static final String ENCODING = "utf8";
    int position;
    private UserNamesTask task;
    String bufferData;
    String[] data;/* = {"Иванов", "Сидоров", "Петров", "Фельдшеров", "Говоров", "Ибнарцов", "Голукин",
              "ййй1", "цццц2", "уууу3", "ккккк4", "еееее5", "нннннн6", "йцуке7","ййй8", "цццц9", 
              "уууу10", "ккккк11", "еееее12", "нннннн6", "йцуке13"};*/
    
    //String[] data = usersFnameMas;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_medic);
//---------получим список фельдшеров-----------------------------
        task = new UserNamesTask();
        task.execute();
        
         /*//--------------------
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        
        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        spinner.setAdapter(adapter);
        // заголовок
        spinner.setPrompt("Title");
        // выделяем элемент 
        spinner.setSelection(2);
        // устанавливаем обработчик нажатия
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
      @Override
      public void onItemSelected(AdapterView<?> parent, View view,
          int position, long id) {
        // показываем позиция нажатого элемента
        Toast.makeText(getBaseContext(), "Position = " + position, Toast.LENGTH_SHORT).show();
      }
      @Override
      public void onNothingSelected(AdapterView<?> arg0) {
      }
    });*/
        //---------------------------------
      }
    //-----------------------------------------------------------
    public static class UserInfo {
        private int id;
        private String login;
        private String password;
        private String firstName;
        private String secondName;
        private String lastName;
        private String phone;
 
        public UserInfo() {
            super();
        }
        //Информация о пользователе---------------------------------
        public UserInfo(int id, String login, String password,
                String firstName, String secondName, String lastName,
                String phone) {
            super();
            this.id = id;
            this.login = login;
            this.password = password;
            this.firstName = firstName;
            this.secondName = secondName;
            this.lastName = lastName;
            this.phone = phone;
        }
        //свойства класса---------------------------
        public int getId() {
            return id;
        }
 
        public void setId(int id) {
            this.id = id;
        }
 
        public String getLogin() {
            return login;
        }
 
        public void setLogin(String login) {
            this.login = login;
        }
 
        public String getPassword() {
            return password;
        }
 
        public void setPassword(String password) {
            this.password = password;
        }
 
        public String getFirstName() {
            return firstName;
        }
 
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
 
        public String getSecondName() {
            return secondName;
        }
 
        public void setSecondName(String secondName) {
            this.secondName = secondName;
        }
 
        public String getLastName() {
            return lastName;
        }
 
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
 
        public String getPhone() {
            return phone;
        }
 
        public void setPhone(String phone) {
            this.phone = phone;
        }
        @Override
        public String toString() {
            return "UserInfo [id=" + id + ", login=" + login + ", password="
                    + password + ", firstName=" + firstName + ", secondName="
                    + secondName + ", lastName=" + lastName + ", phone="
                    + phone + "]";
        }
 
    }
 
    // -------------------------
    public class UserNamesTask extends AsyncTask<Void, UserInfo, Void> {
 
        public static final String KEY_ID = "FID";
        public static final String KEY_LOGIN = "login";
        public static final String KEY_PASSWORD = "password";
        public static final String KEY_FIRST_NAME = "Fname";
        private static final String KEY_LAST_NAME = "Lname";
        private static final String KEY_SECOND_NAME = "Sname";
        public static final String KEY_PHONE = "Fphone";
 
        private JSONArray jsonArray;
        private String webData = null;
        private StringBuilder sb = null;
        private Throwable exception;
  
        @Override
        protected Void doInBackground(Void... params) {
            HttpEntity entity = null;
            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(HOSTusers);
                HttpResponse response = httpclient.execute(httppost);
                entity = response.getEntity();              
            } catch (Exception e) {
                Log.e(TAG, "Error in http connection" + e.toString(), e);
                exception = e;
                return null;
            }
            BufferedReader reader = null;
            InputStream is = null;
            try {
                is = entity.getContent();
                reader = new BufferedReader(
                        new InputStreamReader(is, ENCODING), 8);
                sb = new StringBuilder();
 
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                
                webData = sb.toString();
            } catch (Exception e) {
                Log.e(TAG, "Error converting result " + e.toString(), e);
                exception = e;
                return null;
            } finally {
                try {
                    reader.close();
                    is.close();
                } catch (IOException e) {
                    Log.e(TAG, "Unexpected Error" + e.toString(), e);
                }
            }
 
            try {
                jsonArray = new JSONArray(webData);
                JSONObject jsonData = null; 
                for (int i = 0; i < jsonArray.length(); i++) {
                    jsonData = jsonArray.getJSONObject(i);
                    final UserInfo userInfo = new UserInfo();       
                    userInfo.setFirstName(jsonData.getString(KEY_FIRST_NAME));
                    userInfo.setSecondName(jsonData.getString(KEY_SECOND_NAME));
                    userInfo.setLastName(jsonData.getString(KEY_LAST_NAME));
                    publishProgress(userInfo);
                }
            } catch (JSONException e) {
                Log.e(TAG, "Bad json " + e.toString(), e);
                exception = e;
                return null;
            } catch (ParseException e) {
                Log.e(TAG, "Error converting result " + e.toString(), e);
                exception = e;
                return null;
            }
            return null;
        }
        
        @Override
        protected void onPreExecute()
        {
 
        }
        boolean flag=true;
        int i = 0;
        @Override
        protected void onProgressUpdate(UserInfo... values) {
            UserInfo userInfo = values[0];
   bufferData = bufferData+ ". " + userInfo.getFirstName() + ". " + userInfo.getSecondName() + ". " + userInfo.getLastName();
        }
 
        @Override
        protected void onPostExecute(Void result) {
            if (exception != null) {
                Toast.makeText(MedicActivity.this,
                        "Error while getting data from web server",
                        Toast.LENGTH_SHORT).show();
            }
            data=bufferData.split(".");
            //--------!проблема!------------------------------------------
            //--------------------
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            
            Spinner spinner = (Spinner) findViewById(R.id.spinner);
            spinner.setAdapter(adapter);
            // заголовок
            spinner.setPrompt("Title");
            // выделяем элемент 
            spinner.setSelection(2);
            // устанавливаем обработчик нажатия
            spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> parent, View view,
              int position, long id) {
            // показываем позиция нажатого элемента
            Toast.makeText(getBaseContext(), "Position = " + position, Toast.LENGTH_SHORT).show();
          }
          @Override
          public void onNothingSelected(AdapterView<?> arg0) {
          }
        });
            //----------------------------------------------------------------
        }
    }
}
Закомментированная часть в OnCreate работает, а в onPostExecute нет. Говорит, что конструктор не определён.
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
17.05.2013, 19:53 #37
this -> MedicActivity.this

Добавлено через 50 секунд
или getBaseContext()
1
8VAid8
14 / 14 / 2
Регистрация: 21.04.2012
Сообщений: 190
28.05.2013, 20:44  [ТС] #38
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
package com.example.med;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.Activity;
import android.content.Intent;
import android.net.ParseException;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class VizovActivity extends Activity implements OnClickListener {
    
    //----Info-----------
    String PFname;
    String PSname;
    String PLname;
    int[] PIDmas = new int[100];
    String PatientFIO;
    
    String AdressStreet;
    String AdressNum;
    String Pphone;
    String Contr;
    String Npolis;
    String Birthday;
    //------------------------------
    private TaskNamesPatients taskp;
    int j = 0;
    Button buttonFound;
    EditText editFname, editSname, editLname, editAdressStreet, editAdressNum; 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_vizov);
        buttonFound = (Button) findViewById(R.id.buttonPersonal);
        buttonFound.setOnClickListener(this);
        
        editFname = (EditText) findViewById(R.id.editFname);
        editSname = (EditText) findViewById(R.id.editSname);
        editLname = (EditText) findViewById(R.id.editLname);
        
        editAdressStreet = (EditText) findViewById(R.id.editAdressStreet);
        editAdressNum = (EditText) findViewById(R.id.editAdressNum);
        
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.vizov, menu);
        return true;
    }
 
    @Override
    public void onClick(View v) {
 
        if (v.getId() == R.id.buttonPersonal) {
            try{
                taskp = new TaskNamesPatients();
                taskp.execute();
            }
            catch (Exception e) {
               Log.e(TAG, "Error:" + e.toString(), e);
           }
        } 
        else {
        }
    }
    //-------получение имён пациентов--------------------------------------------
 
    //-----------------------------
    
        private static final String TAG = VizovActivity.class.getName();
         
        String HOST = "http://medplus.hut4.ru/search_patient.php?search";
        
        private static final String ENCODING = "utf8";
        
   
       public class TaskNamesPatients extends AsyncTask<Void, Void, Void> {           
           public static final String KEY_FNAME = "PFname";
           public static final String KEY_SNAME = "PSname";
           public static final String KEY_LNAME = "PLname";
           public static final String KEY_ID = "PID";
                      
           private JSONArray jsonArray;
           private String webData = null;
           private StringBuilder sb = null;
           private Throwable exception;
     
           @Override
           protected Void doInBackground(Void... params) {
               HttpEntity entity = null;
               try {
                   HttpClient httpclient = new DefaultHttpClient();
                   HttpPost httppost = new HttpPost(HOST+"&Fname="+PFname+"&Sname="+PSname+
            "&Lname="+PLname+"&AdressStreet="+AdressStreet+"&AdressNum="+AdressNum);
                   HttpResponse response = httpclient.execute(httppost);
                   entity = response.getEntity();              
               } catch (Exception e) {
                   Log.e(TAG, "Error in http connection" + e.toString(), e);
                   exception = e;
                   return null;
               }
               BufferedReader reader = null;
               InputStream is = null;
               try {
                   is = entity.getContent();
                   reader = new BufferedReader(
                           new InputStreamReader(is, ENCODING), 8);
                   sb = new StringBuilder();
    
                   String line = null;
                   while ((line = reader.readLine()) != null) {
                       sb.append(line + "\n");
                   }
                   
                   webData = sb.toString();
               } catch (Exception e) {
                   Log.e(TAG, "Error converting result " + e.toString(), e);
                   exception = e;
                   return null;
               } finally {
                   try {
                       reader.close();
                       is.close();
                   } catch (IOException e) {
                       Log.e(TAG, "Unexpected Error" + e.toString(), e);
                   }
               }
    
               try {
                   jsonArray = new JSONArray(webData);
                   JSONObject jsonData = null; 
                   for (int i = 0; i < jsonArray.length(); i++) {
                       jsonData = jsonArray.getJSONObject(i);
                       PFname= jsonData.getString(KEY_FNAME);
                       PSname= jsonData.getString(KEY_SNAME);
                       PLname= jsonData.getString(KEY_LNAME);
                       PIDmas[j] = jsonData.getInt(KEY_ID);j++;
                       PatientFIO = PatientFIO + PFname + " " + PSname + " " + PLname + ",";
                   }
               } catch (JSONException e) {
                   Log.e(TAG, "Bad json " + e.toString(), e);
                   exception = e;
                   return null;
               } catch (ParseException e) {
                   Log.e(TAG, "Error converting result " + e.toString(), e);
                   exception = e;
                   return null;
               }
               return null;
           }
           
           @Override
           protected void onPreExecute()
           {
                //----------------------------------------
                PFname = editFname.getText().toString();
                PSname = editSname.getText().toString();
                PLname = editLname.getText().toString();
                
                AdressStreet = editAdressStreet.getText().toString();
                
                if(!editAdressNum.getText().toString().equals(null)&&!editAdressNum.getText().toString().equals("")&&
                        !editAdressNum.getText().toString().equals(" ")){
                AdressNum =editAdressNum.getText().toString();
                }
                else AdressNum = "1";
                //-----
               PatientFIO = "";
           }
           @Override
           protected void onPostExecute(Void result) {
               if (exception != null) {
                   Toast.makeText(VizovActivity.this,
                           "Error while getting data from web server",
                           Toast.LENGTH_SHORT).show();
               } 
                //----------------------------------------
            Intent intent = new Intent(VizovActivity.this, FoundActivity.class);
            intent.putExtra("PIDmas", PIDmas);
            intent.putExtra("PatientFIO", PatientFIO);
            startActivity(intent);
           }
       }
       //-----------------------------------------------------------------------------
}
Этот класс должен осуществлять поиск по бд с помощью скрипта:
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
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
<?php 
mysql_connect("db","bd","password");
mysql_select_db("bd"); 
 
mysql_set_charset( 'utf8' );                    
 
if (isset($_GET['search']))
{
$Fname = iconv('cp1251','utf-8',$_GET['Fname']);
$Sname = iconv('cp1251','utf-8',$_GET['Sname']);
$Lname = iconv('cp1251','utf-8',$_GET['Lname']);
 
$AdressStreet = iconv('cp1251','utf-8',$_GET['AdressStreet']);
$AdressNum    = iconv('cp1251','utf-8',$_GET['AdressNum']);
 
$sql=mysql_query(
"select * from Patients
where 
   (LOWER(PFname) = LOWER('".$Fname."')
or LOWER(PSname) = LOWER('".$Sname."')
or LOWER(PLname) = LOWER('".$Lname."'))
 
or (LOWER(AdressStreet) = LOWER('".$AdressStreet."')
or AdressNum = '".$AdressNum."')"); 
   
while($row=mysql_fetch_assoc($sql))             
$output[]=$row; 
print json_fix_cyr(json_encode($output));
}
    
mysql_close();
 
 
function json_fix_cyr($json_str) { 
 $cyr_chars = array ( 
 '\u0430' => 'а', '\u0410' => 'А', 
 '\u0431' => 'б', '\u0411' => 'Б', 
 '\u0432' => 'в', '\u0412' => 'В', 
 '\u0433' => 'г', '\u0413' => 'Г', 
 '\u0434' => 'д', '\u0414' => 'Д', 
 '\u0435' => 'е', '\u0415' => 'Е', 
 '\u0451' => 'ё', '\u0401' => 'Ё', 
 '\u0436' => 'ж', '\u0416' => 'Ж', 
 '\u0437' => 'з', '\u0417' => 'З', 
 '\u0438' => 'и', '\u0418' => 'И', 
 '\u0439' => 'й', '\u0419' => 'Й', 
 '\u043a' => 'к', '\u041a' => 'К', 
 '\u043b' => 'л', '\u041b' => 'Л', 
 '\u043c' => 'м', '\u041c' => 'М', 
 '\u043d' => 'н', '\u041d' => 'Н', 
 '\u043e' => 'о', '\u041e' => 'О', 
 '\u043f' => 'п', '\u041f' => 'П', 
 '\u0440' => 'р', '\u0420' => 'Р', 
 '\u0441' => 'с', '\u0421' => 'С', 
 '\u0442' => 'т', '\u0422' => 'Т', 
 '\u0443' => 'у', '\u0423' => 'У', 
 '\u0444' => 'ф', '\u0424' => 'Ф', 
 '\u0445' => 'х', '\u0425' => 'Х', 
 '\u0446' => 'ц', '\u0426' => 'Ц', 
 '\u0447' => 'ч', '\u0427' => 'Ч', 
 '\u0448' => 'ш', '\u0428' => 'Ш', 
 '\u0449' => 'щ', '\u0429' => 'Щ', 
 '\u044a' => 'ъ', '\u042a' => 'Ъ', 
 '\u044b' => 'ы', '\u042b' => 'Ы', 
 '\u044c' => 'ь', '\u042c' => 'Ь', 
 '\u044d' => 'э', '\u042d' => 'Э', 
 '\u044e' => 'ю', '\u042e' => 'Ю', 
 '\u044f' => 'я', '\u042f' => 'Я', 
 
 '\r' => '', 
 '\n' => '<br />', 
 '\t' => '' 
 ); 
 
 foreach ($cyr_chars as $cyr_char_key => $cyr_char) { 
 $json_str = str_replace($cyr_char_key, $cyr_char, $json_str); 
 } 
 return $json_str; 
}
?>
При английских значениях поля editFname и пустых остальных работает нормально, а при русских, если ввести в поле editAdressNum значение, не совпадающее с соответствующим текущим значением editFname или оставить пустым, то вылетает ошибка:
Кликните здесь для просмотра всего текста
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): Bad json org.json.JSONException: Value null<!-- of type java.lang.String cannot be converted to JSONArray
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): org.json.JSONException: Value null<!-- of type java.lang.String cannot be converted to JSONArray
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at org.json.JSON.typeMismatch(JSON.java:111)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at org.json.JSONArray.<init>(JSONArray.java:91)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at org.json.JSONArray.<init>(JSONArray.java:103)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at com.example.med.VizovActivity$TaskNamesPatients.doInBackground(VizovActivity.java:152)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at com.example.med.VizovActivity$TaskNamesPatients.doInBackground(VizovActivity.java:1)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-27 17:14:57.731: E/com.example.med.VizovActivity(3379): at java.lang.Thread.run(Thread.java:856)

В скрипте кодировка utf8.

Добавлено через 21 час 57 минут
Думал, что возможна ошибка была из за возвращаемого html вместе с json. Исправил. Не помогло.
Какие возможны варианты?

Добавлено через 1 час 27 минут
Решено. Дело было в кодировке. В скрипте шла конвертация
Java
1
$Lname = iconv('cp1251','utf-8',$_GET['Lname']);
Без неё не выводилось в браузере, а с ней в андроиде были ошибки. Пришлось ампутировать.
0
8VAid8
14 / 14 / 2
Регистрация: 21.04.2012
Сообщений: 190
30.05.2013, 18:16  [ТС] #39
Продолжу писать в эту тему, т.к. суть вопроса схожа с предыдущими.

Отправляю пост-запрос скрипту. В браузере проходит. Здесь вылетают ошибки. Вот логи:
Java
1
2
3
4
5
6
7
8
9
10
11
12
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416): Error in http connectionjava.lang.IllegalArgumentException: Illegal character in query at index 62: [url]http://medplus.hut4.ru/vizovi.php?add&FID=1&why=rana&PFIO=Alex[/url] Kent Dolson&adress=st. Angels 19&MedName=bint&Nmed=4&Vmed=0&diagnos=ranko
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416): java.lang.IllegalArgumentException: Illegal character in query at index 62: [url]http://medplus.hut4.ru/vizovi.php?add&FID=1&why=rana&PFIO=Alex[/url] Kent Dolson&adress=st. Angels 19&MedName=bint&Nmed=4&Vmed=0&diagnos=ranko
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at java.net.URI.create(URI.java:727)
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:79)
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at com.example.med.DescribeActivity$TaskCall.doInBackground(DescribeActivity.java:103)
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at com.example.med.DescribeActivity$TaskCall.doInBackground(DescribeActivity.java:1)
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-30 14:05:29.168: E/com.example.med.DescribeActivity(1416):   at java.lang.Thread.run(Thread.java:856)
и код класса:
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package com.example.med;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.Activity;
import android.content.Intent;
import android.net.ParseException;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class DescribeActivity extends Activity implements OnClickListener{
    int FID;
    String why;
    String PFIO;
    String adress;
    String MedName;
    String Nmed;
    String Vmed;
    String diagnos;
    TaskCall task;
    EditText editWhy,editMedName, editNmed, editVmed, editDiagnos;
    Button buttonAdd;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_describe);
        
        editWhy = (EditText)findViewById(R.id.editWhy);
        editMedName = (EditText)findViewById(R.id.editMedName);
        editNmed = (EditText)findViewById(R.id.editNmed);
        editVmed = (EditText)findViewById(R.id.editVmed);
        editDiagnos = (EditText)findViewById(R.id.editDiagnos);
        
        buttonAdd = (Button)findViewById(R.id.buttonAdd);
        buttonAdd.setOnClickListener(this);
        //-получим id фельдшера    
        Intent intent = getIntent();
        FID = intent.getIntExtra("FID", -1);
        PFIO = intent.getStringExtra("Pfio");
        adress = intent.getStringExtra("Adress");
    }
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v.getId() == R.id.buttonAdd)
        {
            task = new TaskCall();
            task.execute();
        }
        
    }
    //-------получение имён пациентов--------------------------------------------
 
        //-----------------------------
        
            private static final String TAG = DescribeActivity.class.getName();
             
            String HOST = "http://medplus.hut4.ru/vizovi.php?add";
            
            private static final String ENCODING = "utf8";
       
           public class TaskCall extends AsyncTask<Void, Void, Void> {           
               public static final String KEY_VID = "VID";
               public static final String KEY_FID = "FID";
               public static final String KEY_why = "why";
               public static final String KEY_date = "date";
               public static final String KEY_FFIO = "FFIO";
               public static final String KEY_PFIO = "PFIO";
               public static final String KEY_adress = "adress";
               public static final String KEY_MedName = "MedName";
               public static final String KEY_Nmed = "Nmed";
               public static final String KEY_Vmed = "Vmed";
               public static final String KEY_diagnos = "diagnos";
                          
               private JSONArray jsonArray;
               private String webData = null;
               private StringBuilder sb = null;
               private Throwable exception;
         
               @Override
               protected Void doInBackground(Void... params) {
                   HttpEntity entity = null;
                   try {
                       HttpClient httpclient = new DefaultHttpClient();
                       HttpPost httppost = new HttpPost(HOST+"&FID="+FID+"&why="+why+
                 "&PFIO="+PFIO+"&adress="+adress+"&MedName="+MedName+"&Nmed="+Nmed+"&Vmed="+Vmed+"&diagnos="+diagnos);
                      /* HttpResponse response =*/ httpclient.execute(httppost);
                       //entity = response.getEntity();              
                   } catch (Exception e) {
                       Log.e(TAG, "Error in http connection" + e.toString(), e);
                       exception = e;
                       return null;
                   }
                return null;
               }
               
               @Override
               protected void onPreExecute()
               {
                   why = editWhy.getText().toString();
                   MedName = editMedName.getText().toString();
                   Nmed = editNmed.getText().toString();
                   Vmed = editVmed.getText().toString();
                   diagnos = editDiagnos.getText().toString();
               }
               @Override
               protected void onPostExecute(Void result) {
                   if (exception != null) {
                       Toast.makeText(DescribeActivity.this,
                               "Error while getting data from web server",
                               Toast.LENGTH_SHORT).show();
                   } 
                   else Toast.makeText(DescribeActivity.this,
                           "Данные сохранены.",
                           Toast.LENGTH_SHORT).show();
               }
           }
           //-----------------------------------------------------------------------------
 
}
В формировании запроса ошибок быть не должно. Подключение к сети в отдельном потоке.
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.05.2013, 18:50 #40
мне кажется проблема в пробелах, не видел ссылок с пробелами.

Добавлено через 40 секунд
для отправки данных используют POST

Добавлено через 23 секунды
GET для запросов.

Добавлено через 31 секунду
попробуйте заменить пробелы на "%20"
1
8VAid8
14 / 14 / 2
Регистрация: 21.04.2012
Сообщений: 190
30.05.2013, 19:10  [ТС] #41
Заменил пробелы. Работает.
Но как их заменять при вводе текста в EditText?
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.05.2013, 19:15 #42
а зачем при вводе заменять? заменяй при отправке.
0
8VAid8
14 / 14 / 2
Регистрация: 21.04.2012
Сообщений: 190
30.05.2013, 19:46  [ТС] #43
Что-то вроде такого:
Java
1
2
String zapros = HOST+"&FID="+FID+"&why="+why+
                 "&PFIO="+PFIO+"&adress="+adress+"&MedName="+MedName+"&Nmed="+Nmed+"&Vmed="+Vmed+"&diagnos="+diagnos;
И если в строке zapros есть пробелы, то заменить их на %20?

А возможно использование функции URLEncoder.encode?
Java
1
2
HttpPost httppost = new HttpPost(HOST+"&FID="+FID+"&why="+URLEncoder.encode(why)+
                 "&PFIO="+URLEncoder.encode(PFIO)+"&adress="+URLEncoder.encode(adress)+"&MedName="+URLEncoder.encode(MedName)+"&Nmed="+URLEncoder.encode(Nmed)+"&Vmed="+URLEncoder.encode(Vmed)+"&diagnos="+URLEncoder.encode(diagnos));
Когда я её использую, то еклипс зачёркивает строку и пишет что метод устарел.

Добавлено через 14 минут
Изменил конструкцию на :
Java
1
2
3
4
HttpPost httppost = new HttpPost(HOST+"&FID="+FID+"&why="+URLEncoder.encode(why, "utf8")+
                 "&PFIO="+URLEncoder.encode(PFIO,"utf8")+"&adress="+URLEncoder.encode(adress,"utf8")+
                 "&MedName="+URLEncoder.encode(MedName,"utf8")+"&Nmed="+URLEncoder.encode(Nmed,"utf8")+
                 "&Vmed="+URLEncoder.encode(Vmed,"utf8")+"&diagnos="+URLEncoder.encode(diagnos,"utf8"));
Работает, и не нужно заменять вручную пробелы.
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
30.05.2013, 20:40 #44
я думаю можно просто
Java
1
2
String zapros = HOST+"&FID="+FID+"&why="+why+              "&PFIO="+PFIO+"&adress="+adress+"&MedName="+MedName+"&Nmed="+Nmed+"&Vmed="+Vmed+"&diagnos="+diagnos;
zapros = URLEncoder.encode(zapros ,"utf8");
0
30.05.2013, 20:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2013, 20:40
Привет! Вот еще темы с ответами:

База данных Android из Eclipse - Программирование Android
Доброго времени суток. Читаю литературу по БД для андроид, и наткнулся на такую вещь, чтобы создать БД нужно ее полностью прописать в...

Удаленная база данных для Android - Программирование Android
Здраствуйте! Помогите, пожалуйста! Я понял суть удаленной базы данных MySQL для интернет приложения, но я сам не могу написать, так как я...

Android, ListView, база данных SQLite - Программирование Android
Как достать картинку из БД (SQLite) и поместить её в ListView??? помогите, пожалуйста :)

Имеется база данных mysql (с сайта), в ней данные о товаре, как проще всего сделать онлайн андроид приложение - Программирование Android
Имеется база данных mysql(с сайта), в ней данные о товаре. Как сделать онлайн андроид приложение для быстрого поиска товаров по этой базе...


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

Или воспользуйтесь поиском по форуму:
44
Ответ Создать тему
Опции темы

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