سلام خسته نباشید ، ابتدا باید از مدیر سایت برای قرار دادن مطالب بسیار مفید تشکر کنم . و از شما تقاضا دارم در رفع این مشکل کمکم کنید .
بنده یک برنامه ایجاد کردم که داده هاشو از اینترنت باید دریافت کنه (برنامه برای نمایش اطلاعات سایت) برنامه زمانیکه یک رشته ساده را از اینترنت می فرستم درست عمل میکنه و نمایش میده ولی نمیدونم چرا زمانیکه آرایه ای حاوی رشته ها را می خواهد بفرستد مقدار خالی و یا array را نمایش می دهد !!
اینم کد دریافت اطلاعات از سرور :
کد پیاچپی:
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("action", "نرم افزار"));
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params);
entity.setContentEncoding(HTTP.UTF_8);
entity.setContentType("application/json");
httpPost.setEntity(entity);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
final StringBuilder sb = new StringBuilder();
String line = null;
int i=0;
while ((line = reader.readLine()) != null) {
sb.append(line);
items.add(new listviewitem()
{{
imgview=R.drawable.ic_launcher;
String my_string_1 = new String(sb.toString().getBytes("ISO-8859-1"),"UTF-8");
txttitel=my_string_1;
}});
}
is.close();
اینم کد php
کد پیاچپی:
$al=mysqli_query($con,"SELECT post_title FROM wp_cityposts where post_type='post'");
$response = array();
while($r = mysql_fetch_assoc($al))
{
$response[]=$r;
}
// }
//echo json_encode($response[]);
print($response);
پیشاپیش از کمک شما سپاسگذارم .
سلام.
بنده خودم هر زمان که قرار است یک فایل php جدید را کدنویسی کنم، بذون درگیر شدن با کدنویسی برنامه اندروید، ابتدا صحت کدنویسی فایل php را تست می کنم (با اجرای صفحه در مرورگر اینترنت). تست صفحه یا می تواند در خود سرور اینترنتی صورت گیرد یا در کامپیوتر موجود در خانه (با نرم افزارهای شبیه ساز سرور مثل Wamp Server).
همچنین در کدنویسی PHP ، توصیه می کنم مقدار متغیرها را با تابع var_dump در خروجی مشاهده کنید (منظورم در مرحله تست صفحه است).
اکنون به سراغ کدهای صفحه شما می رویم. من یک کد نمونه و مشابه کدهای شما نوشتم و آن را تست کردم :
کد پیاچپی:
<?php
$i=1;
$response = array();
while ($i<6){
$response[] = $i;
$i = $i+1;
}
var_dump($response);
print($response);
?>
خروجی، شامل یک متن خطا می باشد (خروجی در مرورگر اینترنت) :
پس مشکل از نمایش اطلاعات در خروجی است (با var_dump متوجه شدیم که آرایه به درستی تعریف شده). کدها را به صورت زیر می نویسیم :
کد پیاچپی:
<?php
$i=1;
$response = array();
while ($i<6){
$response[] = $i;
$i = $i+1;
}
var_dump($response);
echo json_encode($response);
?>
نتیجه اجرای کدها (این بار بدون خطا) :
کد پیاچپی:
array (size=5)
0 => int 1
1 => int 2
2 => int 3
3 => int 4
4 => int 5
[1,2,3,4,5]
بنابراین اکنون دیگر باید دستور var_dump را حذف کنیم تا خروجی صفحه، همان خروجی مورد نظرتان باشد (همیشه به همین شکل، صفحه php را تست کرده و در مرحله آخر نیز بخش های مربوط به تست، مثل همین دستور var_dump را حذف کنید).
(۱۳۹۴/۰۹/۱۸, ۰۳:۴۶ ب.ظ)admin نوشته: [ -> ]سلام.
بنده خودم هر زمان که قرار است یک فایل php جدید را کدنویسی کنم، بذون درگیر شدن با کدنویسی برنامه اندروید، ابتدا صحت کدنویسی فایل php را تست می کنم (با اجرای صفحه در مرورگر اینترنت). تست صفحه یا می تواند در خود سرور اینترنتی صورت گیرد یا در کامپیوتر موجود در خانه (با نرم افزارهای شبیه ساز سرور مثل Wamp Server).
همچنین در کدنویسی PHP ، توصیه می کنم مقدار متغیرها را با تابع var_dump در خروجی مشاهده کنید (منظورم در مرحله تست صفحه است).
اکنون به سراغ کدهای صفحه شما می رویم. من یک کد نمونه و مشابه کدهای شما نوشتم و آن را تست کردم :
کد پیاچپی:
<?php
$i=1;
$response = array();
while ($i<6){
$response[] = $i;
$i = $i+1;
}
var_dump($response);
print($response);
?>
خروجی، شامل یک متن خطا می باشد (خروجی در مرورگر اینترنت) :
پس مشکل از نمایش اطلاعات در خروجی است (با var_dump متوجه شدیم که آرایه به درستی تعریف شده). کدها را به صورت زیر می نویسیم :
کد پیاچپی:
<?php
$i=1;
$response = array();
while ($i<6){
$response[] = $i;
$i = $i+1;
}
var_dump($response);
echo json_encode($response);
?>
نتیجه اجرای کدها (این بار بدون خطا) :
کد پیاچپی:
array (size=5)
0 => int 1
1 => int 2
2 => int 3
3 => int 4
4 => int 5
[1,2,3,4,5]
بنابراین اکنون دیگر باید دستور var_dump را حذف کنیم تا خروجی صفحه، همان خروجی مورد نظرتان باشد (همیشه به همین شکل، صفحه php را تست کرده و در مرحله آخر نیز بخش های مربوط به تست، مثل همین دستور var_dump را حذف کنید).
خیلی ممنون از وقتی که در اختیار کاربران قرار می دهید .
نتیجه من به صورت نامفهومه !
فکر می کنم با json_encode درست بشه و نتیجه select درست است ، ولی بازم چیزی در لیست نمایش داده نمی شود برنامه اندروید تغییرات دیگری نیاز ندارد؟
(۱۳۹۴/۰۹/۱۸, ۰۳:۴۶ ب.ظ)admin نوشته: [ -> ]سلام.
بنده خودم هر زمان که قرار است یک فایل php جدید را کدنویسی کنم، بذون درگیر شدن با کدنویسی برنامه اندروید، ابتدا صحت کدنویسی فایل php را تست می کنم (با اجرای صفحه در مرورگر اینترنت). تست صفحه یا می تواند در خود سرور اینترنتی صورت گیرد یا در کامپیوتر موجود در خانه (با نرم افزارهای شبیه ساز سرور مثل Wamp Server).
همچنین در کدنویسی PHP ، توصیه می کنم مقدار متغیرها را با تابع var_dump در خروجی مشاهده کنید (منظورم در مرحله تست صفحه است).
اکنون به سراغ کدهای صفحه شما می رویم. من یک کد نمونه و مشابه کدهای شما نوشتم و آن را تست کردم :
کد پیاچپی:
<?php
$i=1;
$response = array();
while ($i<6){
$response[] = $i;
$i = $i+1;
}
var_dump($response);
print($response);
?>
خروجی، شامل یک متن خطا می باشد (خروجی در مرورگر اینترنت) :
پس مشکل از نمایش اطلاعات در خروجی است (با var_dump متوجه شدیم که آرایه به درستی تعریف شده). کدها را به صورت زیر می نویسیم :
کد پیاچپی:
<?php
$i=1;
$response = array();
while ($i<6){
$response[] = $i;
$i = $i+1;
}
var_dump($response);
echo json_encode($response);
?>
نتیجه اجرای کدها (این بار بدون خطا) :
کد پیاچپی:
array (size=5)
0 => int 1
1 => int 2
2 => int 3
3 => int 4
4 => int 5
[1,2,3,4,5]
بنابراین اکنون دیگر باید دستور var_dump را حذف کنیم تا خروجی صفحه، همان خروجی مورد نظرتان باشد (همیشه به همین شکل، صفحه php را تست کرده و در مرحله آخر نیز بخش های مربوط به تست، مثل همین دستور var_dump را حذف کنید).
ببخشید من می خواهم آموزش کلید شماره 2651 را استفاده کنم اما در این قسمت کد خطا می دهد !
کد پیاچپی:
setListAdapter(new MyAdapter(MainActivity.this,
R.layout.list_item,
R.id.txttitel,
json_string_1_all));
lv = getListView();
و خطای آن نبودن setListAdapter می باشد و پیشنهاد می دهد که در کلاس myadapter آن را ایجاد کنم .
(۱۳۹۴/۰۹/۱۸, ۰۵:۲۱ ب.ظ)mcn.nice نوشته: [ -> ] (۱۳۹۴/۰۹/۱۸, ۰۳:۴۶ ب.ظ)admin نوشته: [ -> ]سلام.
بنده خودم هر زمان که قرار است یک فایل php جدید را کدنویسی کنم، بذون درگیر شدن با کدنویسی برنامه اندروید، ابتدا صحت کدنویسی فایل php را تست می کنم (با اجرای صفحه در مرورگر اینترنت). تست صفحه یا می تواند در خود سرور اینترنتی صورت گیرد یا در کامپیوتر موجود در خانه (با نرم افزارهای شبیه ساز سرور مثل Wamp Server).
همچنین در کدنویسی PHP ، توصیه می کنم مقدار متغیرها را با تابع var_dump در خروجی مشاهده کنید (منظورم در مرحله تست صفحه است).
اکنون به سراغ کدهای صفحه شما می رویم. من یک کد نمونه و مشابه کدهای شما نوشتم و آن را تست کردم :
کد پیاچپی:
<?php
$i=1;
$response = array();
while ($i<6){
$response[] = $i;
$i = $i+1;
}
var_dump($response);
print($response);
?>
خروجی، شامل یک متن خطا می باشد (خروجی در مرورگر اینترنت) :
پس مشکل از نمایش اطلاعات در خروجی است (با var_dump متوجه شدیم که آرایه به درستی تعریف شده). کدها را به صورت زیر می نویسیم :
کد پیاچپی:
<?php
$i=1;
$response = array();
while ($i<6){
$response[] = $i;
$i = $i+1;
}
var_dump($response);
echo json_encode($response);
?>
نتیجه اجرای کدها (این بار بدون خطا) :
کد پیاچپی:
array (size=5)
0 => int 1
1 => int 2
2 => int 3
3 => int 4
4 => int 5
[1,2,3,4,5]
بنابراین اکنون دیگر باید دستور var_dump را حذف کنیم تا خروجی صفحه، همان خروجی مورد نظرتان باشد (همیشه به همین شکل، صفحه php را تست کرده و در مرحله آخر نیز بخش های مربوط به تست، مثل همین دستور var_dump را حذف کنید).
ببخشید من می خواهم آموزش کلید شماره 2651 را استفاده کنم اما در این قسمت کد خطا می دهد !
کد پیاچپی:
setListAdapter(new MyAdapter(MainActivity.this,
R.layout.list_item,
R.id.txttitel,
json_string_1_all));
lv = getListView();
و خطای آن نبودن setListAdapter می باشد و پیشنهاد می دهد که در کلاس myadapter آن را ایجاد کنم .
مدیر گرامی من دیگه مخم یاری نمیکنه کل سایت های لاتین و ایرانی را زیر و رو کردم همش خطا میده!!
الان که باز از این برنامه خط زیر را خطا می دهد !
کد پیاچپی:
public class JSONParse extends AsyncTask<String, String, JSONObject> {
public ProgressDialog pDialog;
String my_string_1="";
@Override
public void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
public JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl(url);
return json;
}
@Override
public void onPostExecute(JSONObject json) {
ListView lv=(ListView)findViewById(R.id.listView2);
CustomListViewAdapter adapter=new CustomListViewAdapter(MainActivity.this,items);
pDialog.dismiss();
try {
cityroid = json.getJSONArray(json_titel);
// build String
json_length = cityroid.length();
json_string_1_all = new String [cityroid.length()];
json_string_2_all = new String [cityroid.length()];
json_string_3_all = new String [cityroid.length()];
for(int i = 0; i < cityroid.length(); i++){
JSONObject c = cityroid.getJSONObject(i);
// Storing JSON item in a Variable --> with UTF-8 for persian words
json_string_1_all[i] = new String(c.getString(json_pic).getBytes("ISO-8859-1"), "UTF-8");
json_string_2_all[i] = new String(c.getString(json_command).getBytes("ISO-8859-1"), "UTF-8");
json_string_3_all[i] = new String(c.getString(json_apkdl).getBytes("ISO-8859-1"), "UTF-8");
}
// show data in ListView
for(int i = 0; i < cityroid.length(); i++){
my_string_1= json_string_1_all[i];
items.add(new listviewitem()
{{
imgview=R.drawable.ic_launcher;
txttitel=my_string_1;
}});
lv.setAdapter(adapter);
}
} catch (JSONException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
}
اینم خطی که خطا می گیرد !
کد پیاچپی:
cityroid = json.getJSONArray(json_titel);
(۱۳۹۴/۰۹/۱۸, ۰۵:۱۴ ب.ظ)mcn.nice نوشته: [ -> ]نتیجه من به صورت نامفهومه !
فکر می کنم با json_encode درست بشه و نتیجه select درست است ، ولی بازم چیزی در لیست نمایش داده نمی شود برنامه اندروید تغییرات دیگری نیاز ندارد؟
منظورتان را از ((نامفهوم)) متوجه نشدم، ولی اگر کاراکترهای متن، فارسی باشند، هنگام تست صفحه (در مرورگر اینترنت)، کاراکترها را به شکل دیگری می بینیم (پس از این بابت، جای نگرانی نیست). دلیلش این است که ما چارچوب HTML را در خروجی ذکر نمی کنم (اگر چک کردن متن فارسی مهم بود، یک صفحه تست دیگر ایجاد کنید و متن را در چارچوب HTML قرار بدهید تا متن فارسی را به شکل صحیح ببینید، اما این مورد، تنها برای تست است و آن را برای صفحه اصلی به کار نبرید).
من بخش پردازش متن دریافتی با روش های مرتبط با json را در کدی که در ارسال اول قرار داده بودید، ندیدم. فکر می کنم همین کلید 2651 که ذکر کردید را اگز کامل بخوانید و تست کنید، تمامی این موارد روشن خواهد شد.
برای گیج نشدن، به صورت مرحله بندی پیش بروید (منظورم در پروژه خودتان است) :
گام اول : خروجی صفحه PHP را در مرورگر اینترنت به دست بیاورید (آنچه قصد دارید برنامه دریافت کند) (می توانید ابتدا آن را با یک متن انگلیسی تست کنید و بعد به سراغ متن فارسی بروید)
گام دوم : همین متن را توسط برنامه اندروید دریافت کرده و در یک TextView نمایش بدهید (تا حداقل از دریافت صحیح متن، اطمینان پیدا کنید)
گام سوم : از متن دریافتی، مقادیری که در آن ذکر شده اند (با ساختار json) را با روش های مرتبط با json ، استخراج کرده و در یک آرایه (Array یا ArrayList) ذخیره کنید و بعد با روشی دلخواه، صحت مقادیر را چک کنید (مثلا با Log نویسی یا با نمایش توسط روش Toast به صورت یک پیام کوتاه چند ثانیه ای)
گام چهارم : از آرایه ساخت شده، برای ساخت و نمایش ListView استفاده کنید.
در مورد
کلید شماره 2651 ، کلید مورد نظر دارای پروژه اندروید است. آن را دریافت کنید و بررسی های لازم را بر روی آن پروژه انجام دهید.
(۱۳۹۴/۰۹/۱۸, ۰۷:۲۳ ب.ظ)admin نوشته: [ -> ] (۱۳۹۴/۰۹/۱۸, ۰۵:۱۴ ب.ظ)mcn.nice نوشته: [ -> ]نتیجه من به صورت نامفهومه !
فکر می کنم با json_encode درست بشه و نتیجه select درست است ، ولی بازم چیزی در لیست نمایش داده نمی شود برنامه اندروید تغییرات دیگری نیاز ندارد؟
منظورتان را از ((نامفهوم)) متوجه نشدم، ولی اگر کاراکترهای متن، فارسی باشند، هنگام تست صفحه (در مرورگر اینترنت)، کاراکترها را به شکل دیگری می بینیم (پس از این بابت، جای نگرانی نیست). دلیلش این است که ما چارچوب HTML را در خروجی ذکر نمی کنم (اگر چک کردن متن فارسی مهم بود، یک صفحه تست دیگر ایجاد کنید و متن را در چارچوب HTML قرار بدهید تا متن فارسی را به شکل صحیح ببینید، اما این مورد، تنها برای تست است و آن را برای صفحه اصلی به کار نبرید).
من بخش پردازش متن دریافتی با روش های مرتبط با json را در کدی که در ارسال اول قرار داده بودید، ندیدم. فکر می کنم همین کلید 2651 که ذکر کردید را اگز کامل بخوانید و تست کنید، تمامی این موارد روشن خواهد شد.
برای گیج نشدن، به صورت مرحله بندی پیش بروید (منظورم در پروژه خودتان است) :
گام اول : خروجی صفحه PHP را در مرورگر اینترنت به دست بیاورید (آنچه قصد دارید برنامه دریافت کند) (می توانید ابتدا آن را با یک متن انگلیسی تست کنید و بعد به سراغ متن فارسی بروید)
گام دوم : همین متن را توسط برنامه اندروید دریافت کرده و در یک TextView نمایش بدهید (تا حداقل از دریافت صحیح متن، اطمینان پیدا کنید)
گام سوم : از متن دریافتی، مقادیری که در آن ذکر شده اند (با ساختار json) را با روش های مرتبط با json ، استخراج کرده و در یک آرایه (Array یا ArrayList) ذخیره کنید و بعد با روشی دلخواه، صحت مقادیر را چک کنید (مثلا با Log نویسی یا با نمایش توسط روش Toast به صورت یک پیام کوتاه چند ثانیه ای)
گام چهارم : از آرایه ساخت شده، برای ساخت و نمایش ListView استفاده کنید.
در مورد کلید شماره 2651 ، کلید مورد نظر دارای پروژه اندروید است. آن را دریافت کنید و بررسی های لازم را بر روی آن پروژه انجام دهید.
باز هم از پاسختان ممنونم ولی من باز هم با وجود استفاده از آموزش شما در آن کلید 2651 به مشکل خوردم یعنی در کد زیر خطا می دهد .
کد پیاچپی:
cityroid = json.getJSONArray(json_titel);
من به طولانی بودن کاراکتر ها شک کردم و به همین خاطر برای select محدودیت قرار دادم اما با وجود آن باز هم خطا می دهد!
کد محدودیت :
کد پیاچپی:
$q=mysqli_query($con,"SELECT post_title FROM wp_cityposts where post_type='post' and post_status='publish' LIMIT 1,1");
نتیجه آن را که در php مشاهده کردم یک رشته بیشتر نبود و دیگر حتم دارم بخاطر طولانی بودن رشته خطا رخ نداده است.
دوستان عزیز کسی نیست به داد ما برسه؟