مشکل در دریافت اطلاعات از سرور (جیسون) حل شده
سلام
دوستان من توی دو تا هاست رایگان دیتابیس و فایل php یکسانی قرار دادم (دیتابیس و فایل php در هر دو هاست کاملاً یکسانند)
دیتابیسم هم دارای مقادیر فارسی هست و utf-8 تعریف شده
حالا وقتی از طریق جیسون اطلاعات رو از سرور اول دریافت میکنم در گوشی به درستی اطلاعات دریافت میشه و هیچ مشکلی نیست، شکل زیر : ( سرور اول gigfa هستش )
ولی وقتی اطلاعات رو از سرور دوم میگیرم یک سری کاراکترهای عجیب و غریب دریافت میکنه و میگه که این اطلاعات جیسون نیست
شکل زیر: ( سرور دوم parspack هستش که سرور ابری هست )
این هم فایل php :
<?php
$connection=mysqli_connect("localhost", "my-user", "my_pass", "db");
if (mysqli_connect_errno())
{
echo "khata b dalile: " . mysqli_connect_error();
}
mysqli_set_charset($connection, 'utf8');
$result = mysqli_query($connection, "SELECT * FROM brands_info");
$output = array();
while($row = mysqli_fetch_array($result))
{
$record = array();
$record['brand_id'] = $row['brand_id'];
$record['brand_name_fa'] = $row['brand_name_fa'];
$record['brand_name_en'] = $row['brand_name_en'];
$record['brand_country'] = $row['brand_country'];
$record['brand_website'] = $row['brand_website'];
$output[]=$record;
}
echo json_encode($output);
mysqli_close($connection);
?>
بعد از دستور if در کد بالا کد خط بعد را پاک کنید و این خط را به جای ان اضافه کنید :
mysqli_query($connection,"SET NAMES 'utf8'");
و در انتهای کد شما به ورودی های تابع json_encode ورودی زیر را اضافه کنید
echo json_encode($output,JSON_UNESCAPED_UNICODE);
تست کنید اطلاع بدید.
دوستان من چک کردم دیدم وقتی با httpUrlConnection به این سرور وصل میشم اطلاعات رو به درستی برمیگردونه (همچنین مقدار Content-Encoding که سرور برمیگردونه null هست) ولی وقتی با httpClient وصل میشم همین مشکل بالا پیش میاد و میگه جیسون نیست (و مقدار Content-Encoding ک سرور برمیگردونه gzip هست)
متد inputstreamToString که همان متد استاد هست:
public static String inputstreamToString(InputStream inputStream)
{
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();
try {
String line;
while ((line = reader.readLine()) != null)
{
builder.append(line);
}
return builder.toString();
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
کد httpClient :
public static String readUrlJsonClient(String url)
{
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("User-Agent", G.USER_AGENT);
try {
HttpResponse response = client.execute(httpGet);
Header[] header= response.getAllHeaders(); // headerhaie daryafti az server
for (int i = 0; i < header.length; i++)
{
Log.i("mytag", header[i].getName() + ":" + header[i].getValue());
}
code = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
Log.i("mytag", "3 ContentEncoding: " + entity.getContentEncoding()); // daryafte header
Log.i("mytag", "3 ContentType: " + entity.getContentType()); // daryafre header
InputStream stream = entity.getContent();
String result = inputstreamToString(stream);
return result;
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return "";
}
کد HttpUrlConnection :
public static String readUrlJsonUrlConnection(String url)
{
try {
URL url1 = new URL(url);
HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
connection.setRequestProperty("User-Agent", G.USER_AGENT);
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();
for (String header: connection.getHeaderFields().keySet()) { // headerhaie daryafti az server
if (header != null) {
for (String value: connection.getHeaderFields().get(header)) {
Log.i("mytag", "2: " + header + ":" + value);
}
}
}
Log.i("mytag", " ContentEncoding:" + connection.getContentEncoding()); // daryafte header
Log.i("mytag", " ContentType:" + connection.getContentType()); // daryafte header
Log.i("mytag", " Date:" + connection.getDate()); // daryafte header
Log.i("mytag", " LastModified():" + connection.getLastModified()); // daryafte header
code = connection.getResponseCode();
InputStream stream = connection.getInputStream();
String result = Tavabe.inputstreamToString(stream);
return result;
}
catch (IOException e) {
e.printStackTrace();
}
return "";
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .

