Прежде всего, спасибо за просмотр моей темы. Кроме того, я видел и пробовал много SO сообщений по этому вопросу и обнаружил, что большинство из них предлагают изменения, такие как UTF, Substring и т. д. Но моя проблема не в коде моего приложения. Вот мое постановление проблемы:
У меня есть приложение для Android, которое находится в стадии разработки и показывает туристические места на основе поиска и предложений, отображаемых во время поиска, сделанного пользователем. Когда пользователь начинает вводить ключевое слово поиска, например, «Princep» затем он видит предложения, которые включают «Princep Ghat, Калькутта». Как поиск работает двумя способами. Когда пользователь выбирает предложение, тогда вызывается страница php с запросом с идентификатором туристического места (LinkId). Он получает только один результат выше сказал туристическое место.
если пользователь не выберет предложение и поиск вместо ключевого слова «Princep» и нажмет кнопку поиска, то он должен увидеть много результатов, где найдено это ключевое слово.
Для фоновой работы у меня есть две страницы PHP. Один для каждого поиска (одиночный поиск с LinkId (bigint), а другой — с Contains, сервера sql. Я использую драйвер PDO для подключения к серверу MS SQL SERver.
ПРОБЛЕМА, с которой я сталкиваюсь: когда я выполняю поиск по LinkId (запрос с предложением where), тогда мой код приложения (Java) работает хорошо, и нет проблемы преобразования строки в JSON. но когда я получаю тот же результат от запроса Contains, работающего со столбцом метаданных, тогда я сталкиваюсь с проблемой. К вашему сведению, мой столбец метаданных varchar, в котором в качестве ключевых слов используются имя, название города и т. Д.
я видел, что переменная показывает возвращенный результат, когда я отлаживаю приложение, и это то же самое для обоих поисков.
Я предполагаю, что мой Java-код в порядке, так как он работает для case, а string преобразуется в Json. но когда одна и та же запись возвращается с использованием запроса на добавление, она показывает ошибку при преобразовании в Json.
Ниже приводится мой Java-код для справки.
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(50000);
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(getQuery(params));
writer.flush();
writer.close();
os.close();
conn.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = reader.readLine();
JSONObject jsonResponse = new JSONObject(line); //Problem comes Here
xLab.clear();
JSONArray jsonArray = jsonResponse.getJSONArray("posts");
PHP-файл, который работает
<?php
/*
Our "config.inc.php" file connects to database every time we include or require
it within a php script. Since we want this script to add a new user to our db,
we will be talking with our database, and therefore,
let's require the connection to happen:
*/
require("config.inc.php");
if (!empty($_POST)) {
$query ="select TOP 50 LinkId,LinkHeading,AttractionName,iconpath, MetaData,countryName,MainCategoryNAme,MainSubCategoryName,latitude,longitude,MainSubCategoryId,ROW_NUMBER() OVER (ORDER BY LinkId) AS RowNum from dbo.trlinks_view where LinkId =:LinkId";
$query_params = array(
':LinkId' => $_POST['LinkId']
);
//execute query
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error!";
die(json_encode($response));
}
// Finally, we can retrieve all of the found rows into an array using fetchAll
$rows = $stmt->fetchAll();if ($rows) {
$response["success"] = 1;
$response["message"] = "Post Available!";
$response["posts"] = array();
foreach ($rows as $row) {
$post = array();
$post["LinkId"] = $row["LinkId"];
$post["LinkHeading"] = $row["LinkHeading"];
$post["IconPath"]=$row["iconpath"];
$post["MainSubCategoryName"]=$row["MainSubCategoryName"];
$post["latitude"]=$row["latitude"];
$post["longitude"]=$row["longitude"];
$post["MainSubCategoryId"]=$row["MainSubCategoryId"];
//update our repsonse JSON data
array_push($response["posts"], $post);
}
// echoing JSON response
echo json_encode($response);} else {
$response["success"] = 0;
$response["message"] = "No Post Available!";
die(json_encode($response));
}
}else{
?>
<h1>Add Comment</h1>
<form action="touristspot_linkid.php" method="post">
Username:<br />
<input type="text" name="LinkId" placeholder="username" />
<br /><br />
<input type="submit" value="Get " />
</form>
<?php
}
?>
PHP файл, который не работает
<?php
require("config.inc.php");
if (!empty($_POST)) {$query ="select TOP 50 LinkId,LinkHeading,AttractionName,iconpath, MetaData,countryName,MainCategoryNAme,MainSubCategoryName,latitude,longitude,MainSubCategoryId,ROW_NUMBER() OVER (ORDER BY LinkId) AS RowNum from dbo.trlinks_view where contains(*,:MetaData) and latitude is not null and longitude is not null";
$query_params = array(
':MetaData' => $_POST['MetaData']
);
//execute query
try {
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error!";
die(json_encode($response));
}
// Finally, we can retrieve all of the found rows into an array using fetchAll
$rows = $stmt->fetchAll();
if ($rows) {
$response["success"] = 1;
$response["message"] = "Post Available!";
$response["posts"] = array();
foreach ($rows as $row) {
$post = array();
$post["LinkId"] = $row["LinkId"];
$post["LinkHeading"] = $row["LinkHeading"];
$post["IconPath"]=$row["iconpath"];
$post["MainSubCategoryName"]=$row["MainSubCategoryName"];
$post["latitude"]=$row["latitude"];
$post["longitude"]=$row["longitude"];
$post["MainSubCategoryId"]=$row["MainSubCategoryId"];
//update our repsonse JSON data
array_push($response["posts"], $post);
}
// echoing JSON response
echo json_encode($response);} else {
$response["success"] = 0;
$response["message"] = "No Post Available!";
die(json_encode($response));
}
}else{
?>
<h1>Add Comment</h1>
<form action="touristspot_metadata.php" method="post">
Username:<br />
<input type="text" name="MetaData" placeholder="username" />
<br /><br />
<input type="submit" value="Get " />
</form>
<?php
}
?>
Значение переменной ‘line’ после оператора readline (используя logcat) после обоих случаев
04-02 07:06:52.260 7119-8577/com.Tourism.CityTours I/lineMessage: {"success":1,"message":"Post Available!","posts":[{"LinkId":"61331","LinkHeading":"Princep Ghat, Kolkata","IconPath":"http:\/\/localhost.com:80\/Images\/default_image.jpg","MainSubCategoryName":"Kolkata","latitude":"22.555327295826448","longitude":"88.33177328109741","MainSubCategoryId":"1092"}]}04-02 07:11:12.806 7119-8412/com.Tourism.CityTours I/lineMessage: {"success":1,"message":"Post Available!","posts":[{"LinkId":"61331","LinkHeading":"Princep Ghat, Kolkata","IconPath":"http:\/\/localhost.com:80\/Images\/default_image.jpg","MainSubCategoryName":"Kolkata","latitude":"22.555327295826448","longitude":"88.33177328109741","MainSubCategoryId":"1092"}]}
Задача ещё не решена.
Других решений пока нет …