#php #android #sql
#php #Android #sql
Вопрос:
Я вызываю этот код в приложении для Android:
public static void sendAccelerationData(String userIDArg, String dateArg, String timeArg,
String timeStamp, String lat, String longi, String alt)
{
//fileName = "AddAccelerationData.php";
//Add data to be send.
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(6);
nameValuePairs.add(new BasicNameValuePair("userID", userIDArg));
nameValuePairs.add(new BasicNameValuePair("date",dateArg));
nameValuePairs.add(new BasicNameValuePair("time",timeArg));
//nameValuePairs.add(new BasicNameValuePair("timeStamp",timeStamp));
nameValuePairs.add(new BasicNameValuePair("lat",lat));
nameValuePairs.add(new BasicNameValuePair("longi",longi));
nameValuePairs.add(new BasicNameValuePair("alt",alt));
//this.sendData(nameValuePairs);
try
{
TextLog.addLogStuff("SERV Trying to connect to Server");
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new
HttpPost("http://myserver.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
Log.i("ServerConn", response.getStatusLine().toString());
TextLog.addLogStuff("SERV PostData: " response.getStatusLine().toString());
//Could do something better with response.
}
catch(Exception e)
{
Log.e("log_tag", "Error: " e.toString());
TextLog.addLogStuff("SERV Connection error: " e.toString());
}
}
Затем код для myserver.php является:
?php
//from the online tutorial:
$usr = "bikemap";
$pwd = "pedalhard";
$db = "test";
$host = "localhost";
$cid = mysql_connect($host,$usr,$pwd);
if (!$cid) { echo("ERROR: " . mysql_error() . "n"); }
$userID = $_POST['userID'];
$date = $_POST['date'];
$time = $_POST['time'];
$lat = $_POST['lat'];
$long = $_POST['longi'];
$alt = $_POST['alt'];
mysql_select_db("test");
mysql_query("INSERT INTO gpsdata (userID, date, time, lat, longi, alt) VALUES ('$userID', '$date', '$time', '$lat','$longi','$alt') ") or die(mysql_error());
/*$SQL = " INSERT INTO gpsdata ";
$SQL = $SQL . " (userID, date, time, lat, longi, alt) VALUES ";
$SQL = $SQL . " ('$userID', '$date', '$time', '$lat','$longi','$alt') ";
$result = mysql_query("$SQL");
if (!$result) {
echo("ERROR: " . mysql_error() . "n$SQLn"); } */
//echo ("New Link Addedn");
mysql_close($cid);
?>
Каким-то образом информация не попадает на sql server. Чтобы просто запустить методы, я снова и снова передаю 6 строк для устранения неполадок. Ни один из которых не попадает на сервер. Есть мысли?
Редактировать:
Этим утром я попытался еще раз устранить неполадки. Я вставил эти строки в свой код Android:
Log.i("ServerConn", response.getStatusLine().toString());
TextLog.addLogStuff("SERV PostData: " response.getStatusLine().toString());
TextLog.addLogStuff("SERV rawData: " nameValuePairs);
Я получил это обратно из текстового файла, созданного TextLog:
11/11/2011 10:11:09:460 AM: SERV userID: Loren
11/11/2011 10:11:09:464 AM: SERV Trying to connect to Server
11/11/2011 10:11:11:666 AM: SERV PostData: HTTP/1.1 200 OK
11/11/2011 10:11:11:674 AM: SERV rawData: [userID=Loren, date=today, time=now,
> lat=bit 1, longi=bit 2, alt=bit 3]
Значит, что-то не так либо с веб-страницей, либо с сервером, верно? Продолжение следует.
Редактировать v2:
Я добавил это в файл php:
$string = "User ID: ";
$string = $string . $userID;
$string = $string . "Date: " . $date;
$string = $string . "n";
$filename = 'test.txt';
$fp = fopen($filename, "a");
$write = fputs($fp, $string);
fclose($fp);
И это содержимое текстового файла:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
ID пользователя: дата:
идентификатор пользователя: Дата:
ID пользователя: даты:
Вопрос 1 Правильно ли я использую формулировки для записи в текстовый файл? Я ответил на это ранее сегодня. Я использую правильную формулировку.
Вопрос 2 Если я использую правильную формулировку, где теряются данные с droid на страницу?
Спасибо всем!
Комментарии:
1. Протестировал, все работает нормально. Итак, проблема не в коде. Каков результат Log.i(«ServerConn», response.getStatusLine().toString());? Вы уверены, что проблема в части Android? Вы тестировали PHP-скрипт в браузере? Есть ли какие-либо сообщения об ошибках?
2. @matthias спасибо, я вставил журнал, чтобы убедиться, что строки анализируются в метод отправки данных правильно. Ответ сервера вернул http 200 ok. Я также добавил текстовый вывод на стороне сервера, который ничего не выводил. Итак, где-то в Android что-то теряется.
3. Я создал страницу для отправки на сервер, и когда я нажимаю кнопку post, все работает так, как должно на стороне сервера. Я полностью в тупике. Я вызываю метод post каждый раз, когда обновляется местоположение gps. Часто ли вызов будет проблематичным?
Ответ №1:
Убедитесь, что вы включили нижеприведенное в свой файл манифеста.
<uses-permission android:name="android.permission.INTERNET"></uses-permission>