انجمن سایت کلیدستان



در یافت اطلاعات از سرور با روش json (در اندروید)زمان کنونی: ۱۳۹۵/۰۹/۲۱، ۰۶:۱۳ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: rayej.ir
آخرین ارسال: am5152
پاسخ 12
بازدید 3807

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
در یافت اطلاعات از سرور با روش json (در اندروید)

در یافت اطلاعات از سرور با روش json (در اندروید)

#1
به نام خدا
سلام،من دو نوع داده json دارم میخاستم بدونم کدام یک درست وکدام یک نادرست است.
نوع اول:

 
کد پی‌اچ‌پی:
[ { "ms""123456""time""2015-06-04T07:32:07+02:00" } , { "ms""rayej.ir""time""2015-06-04T07:32:01+02:00" } , { "ms""test""time""2015-06-04T07:31:43+02:00" } , { "ms""سلام""time""2015-06-04T07:31:37+02:00" } , { "ms":"rayej.ir""time":"" } ] 

نوع دوم:

 
کد پی‌اچ‌پی:
[ { "ms""123456""time""2015-06-04T07:32:07+02:00" } , { "ms""rayej.ir""time""2015-06-04T07:32:01+02:00" } , { "ms""test""time""2015-06-04T07:31:43+02:00" } , { "ms""سلام""time""2015-06-04T07:31:37+02:00" } ,] 

راستی من هرکدام از این داده هارا به برنامه میدم باز نمیشه،ممنون میشم اگر جواب بدید. 
پاسخ

در یافت اطلاعات از سرور با روش json (در اندروید)

#2
parser شما رو میتونیم ببینیم ؟
دقیقا از Data بالا چیرو میخواید parse کنید؟
توضیحات زیر رو بخونید :
http://www.androidhive.info/2012/01/andr...-tutorial/

[ برای JSONArray استفاده میشه و { برای JSONObject
برای مورد اول هم که باید getJSONArray() استفاده کرد.مورد دوم از متد : getJSONObject()
با این حساب ، احتمالا هر دو نادرست هستند.چون برای شروع باید از } استفاده کنید.
با استفاده از سایت زیر راحت تر میتونید بسازیدش:
http://www.jsonschema2pojo.org/
پاسخ
 سپاس شده توسط admin ، داش بهروز ، rayej.ir ، sohrabjam

در یافت اطلاعات از سرور با روش json (در اندروید)

#3
روش دوم شما اشتباه است دوست عزیز چون بعد از شی آخر در آرایه احتیاجی به علامت , نیست.
و ساختار روش اول شما به درستی نوشته شده است.(یک جیسون آرایه هست با 5 شی در داخل آن).
اینکه چیزی نمایش نمیدهد باید ساختار parse  رو همون طور که دوستمون گفت ببینیم تا علت معلوم شه..
شما اگه واسه ساختن جیسون هنوز تسلط کامل ندارید میتونید از jsonEditor ها استفاده کنید .علاوه بر آدرس بالا سایت زیر
https://www.jsoneditoronline.org/
یک سایت خیلی خوبی هست که میتونید جیسون هاتون داخلش بسازید.. کافیه همین جیسوناتون کپی کنید داخل ادیتور این سایت و دکمه ساخت رو بزنید ،میبیند از روش دوم شما ایراد گرفته میشود.

در جواب دوست بالا یک نکته ای وجود داره..لزوما برای شروع جیسون احتیاجی نیست که جیسون با علامت{  شروع بشه .چون میتونه جیسون از یک JsonArray تشکلیل شده باشه .و همون طور که گفتید برای jsonArray  از علامت [  استفاده میشه..پس اینکه هر دو جیسون با علامت [ شروع شده ایرادی نداره و مشکلی نیست. و روش اول این دوستمون به درستی نوشته شده است.
پاسخ
 سپاس شده توسط am5152 ، admin ، rayej.ir

در یافت اطلاعات از سرور با روش json (در اندروید)

#4
 به نام خدا
با تشکر از جواب های قبلی تون
ولی من یک سوال دیگه هم داشتم که چه جوره میتونم با این روش عکس هم دریافت کرد

 
پاسخ
 سپاس شده توسط am5152

در یافت اطلاعات از سرور با روش json (در اندروید)

#5
میتونید در یکی از فیلد ها لینک عکس آپلود شده رو بگذارید و در لیست ویو، یک imageView داشته باشید. سپس بر اساس کلید 2777 محتوای عکس رو از اون شی دانلود کنید و نمایش بدید!

 
پاسخ
 سپاس شده توسط داش بهروز ، rayej.ir ، admin

در یافت اطلاعات از سرور با روش json (در اندروید)

#6
(۱۳۹۴/۰۳/۱۴, ۰۳:۵۶ ب.ظ)داش بهروز نوشته: روش دوم شما اشتباه است دوست عزیز چون بعد از شی آخر در آرایه احتیاجی به علامت , نیست.
و ساختار روش اول شما به درستی نوشته شده است.(یک جیسون آرایه هست با 5 شی در داخل آن).
اینکه چیزی نمایش نمیدهد باید ساختار parse  رو همون طور که دوستمون گفت ببینیم تا علت معلوم شه..
شما اگه واسه ساختن جیسون هنوز تسلط کامل ندارید میتونید از jsonEditor ها استفاده کنید .علاوه بر آدرس بالا سایت زیر
https://www.jsoneditoronline.org/
یک سایت خیلی خوبی هست که میتونید جیسون هاتون داخلش بسازید.. کافیه همین جیسوناتون کپی کنید داخل ادیتور این سایت و دکمه ساخت رو بزنید ،میبیند از روش دوم شما ایراد گرفته میشود.

در جواب دوست بالا یک نکته ای وجود داره..لزوما برای شروع جیسون احتیاجی نیست که جیسون با علامت{  شروع بشه .چون میتونه جیسون از یک JsonArray تشکلیل شده باشه .و همون طور که گفتید برای jsonArray  از علامت [  استفاده میشه..پس اینکه هر دو جیسون با علامت [ شروع شده ایرادی نداره و مشکلی نیست. و روش اول این دوستمون به درستی نوشته شده است.

کد ایشون رو متاسفانه وقت نکردم ببینم ، برای همین از روی شواهد نظر ندادم اما دقت نکرده بودم ، نکته جالبی بود

(۱۳۹۴/۰۳/۱۷, ۱۱:۳۱ ب.ظ)rayej.ir نوشته:  به نام خدا 
با تشکر از جواب های قبلی تون
ولی من یک سوال دیگه هم داشتم که چه جوره میتونم با این روش عکس هم دریافت کرد

سوال خوبیه ، قبلا شدیدا دنبال این بودم.

یه مقدار دیگه در json data تعریف و بعد با استفاده از Adaptor و Data Seter بروی Layout خودتون Set میکنید.مثال زیر هم کمکتون میکنه:

کد پی‌اچ‌پی:
"url""http://url.com/image.jpg" 

مثال:
http://javatechig.com/android/json-feed-...in-android
پاسخ
 سپاس شده توسط داش بهروز ، rayej.ir ، admin ، sohrabjam

در یافت اطلاعات از سرور با روش json (در اندروید)

#7
چیزی که لازم بود بگم و شاید به درد دوستان خورد.اولا در جواب سوال شما.همون طور که دوستان گفتن شما باید لینک عکسی که قبلا آپلود کردید رو فقط در جیسون قرار بدید و بعد از گرفتن این مقدار در کلیدی که دستمون قرار داد شروع به دانلود عکس کنید..

اما چیزی که هم هست اینه که سعی کنید  از فایل جیسون  شما حجم بیشتر از 700 تا 800 کیلو بایت ارسال نشه..که در این صورت بیشتر مواقع  هنگام گرفتن مقادیر از جیسون برنامه هنگ میکنه و عمل گرفتن مقادیر از جیسون صورت نمیگیره و یا به کندی انجام میشه. که راه حلی که در اینجور مواقع میشه  داد، استفاده از دیتابیس و فایل رابط ،یا استفاده از  Gson  که برای گرفتن مقادیر بیشتر از این مقدار کارایی خیلی خوبی داره...دونستن این نکته بهتون کمک میکنه.
پاسخ
 سپاس شده توسط rayej.ir ، admin

در یافت اطلاعات از سرور با روش json (در اندروید)

#8
(۱۳۹۴/۰۳/۱۸, ۰۱:۰۳ ق.ظ)'داش بهروز' نوشته: چیزی که لازم بود بگم و شاید به درد دوستان خورد.اولا در جواب سوال شما.همون طور که دوستان گفتن شما باید لینک عکسی که قبلا آپلود کردید رو فقط در جیسون قرار بدید و بعد از گرفتن این مقدار در کلیدی که دستمون قرار داد شروع به دانلود عکس کنید..

اما چیزی که هم هست اینه که سعی کنید  از فایل جیسون  شما حجم بیشتر از 700 تا 800 کیلو بایت ارسال نشه..که در این صورت بیشتر مواقع  هنگام گرفتن مقادیر از جیسون برنامه هنگ میکنه و عمل گرفتن مقادیر از جیسون صورت نمیگیره و یا به کندی انجام میشه. که راه حلی که در اینجور مواقع میشه  داد، استفاده از دیتابیس و فایل رابط ،یا استفاده از  Gson  که برای گرفتن مقادیر بیشتر از این مقدار کارایی خیلی خوبی داره...دونستن این نکته بهتون کمک میکنه.

 

اضافه کنم که این مورد بیشتر با لایبری 
Volley 

بدلیل ویژگی هایی که دارد:
1. Request queuing and prioritization
[align=justify]2. Effective request cache and memory management
[align=justify]3. Extensibility and customization of the library to our needs
[align=justify]4. Cancelling the requests
به همراه Gson مورد استفاده قرار میگیرد.
اطلاعات بیشتر:
http://www.androidhive.info/2014/05/andr...library-1/

 
پاسخ
 سپاس شده توسط admin ، داش بهروز

در یافت اطلاعات از سرور با روش json (در اندروید)

#9
سلام
ممنون از جواب های قبلی تون
یه سوال دیگه  داشتم من با کد های زیر دادها رو دریافت میکنم
کد پی‌اچ‌پی:
package net.learn2develop.JSON;

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.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class 
JSONActivity extends Activity  {

    public 
String readJSONFeed(String URL) {
        
StringBuilder stringBuilder = new StringBuilder();
        
HttpClient client = new DefaultHttpClient();
        
HttpGet httpGet = new HttpGet(URL);
        try {
            
HttpResponse response client.execute(httpGet);
            
StatusLine statusLine response.getStatusLine();
            
int statusCode statusLine.getStatusCode();
            if (
statusCode == 200) {
                
HttpEntity entity response.getEntity();
                
InputStream content entity.getContent();
                
BufferedReader reader = new BufferedReader(
                        new 
InputStreamReader(content));
                
String line;
                while ((
line reader.readLine()) != null) {
                    
stringBuilder.append(line);
                }
            } else {
                
Log.e("JSON""Failed to download file");
            }
        } catch (
ClientProtocolException e) {
            
e.printStackTrace();
        } catch (
IOException e) {
            
e.printStackTrace();
        }
        return 
stringBuilder.toString();
    }
    
    private class 
ReadJSONFeedTask extends AsyncTask<StringVoidString> {
        protected 
String doInBackground(String... urls) {
            return 
readJSONFeed(urls[0]);
        }
        
        protected 
void onPostExecute(String result) {
            try {
                
JSONArray jsonArray = new JSONArray(result);
                
Log.i("JSON""Number of surveys in feed: " 
                        
jsonArray.length());

                
//---print out the content of the json feed---
                
for (int i 0jsonArray.length(); i++) {
                    
JSONObject jsonObject jsonArray.getJSONObject(i);
                
                    
Toast.makeText(getBaseContext(), jsonObject.getString("ms") + 
                            
" - " jsonObject.getString("time"), 
                            
Toast.LENGTH_SHORT).show();                
                    
                }
            } catch (
Exception e) {
                
e.printStackTrace();
            }        
        }
    }

    
/** Called when the activity is first created. */
    
@Override
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.main);
        
        
/*
        new ReadJSONFeedTask().execute("http://extjs.org.cn/extjs/examples/grid/survey.html");
        */
        
new ReadJSONFeedTask().execute("http://json.rayej.ir");
    }

ولی با پروژه کلیدستان نه اگه میشه بگین چکار کنم؟ تشکر.
پاسخ

در یافت اطلاعات از سرور با روش json (در اندروید)

#10
(۱۳۹۴/۰۳/۱۹, ۰۴:۵۴ ب.ظ)'rayej.ir' نوشته: سلام
ممنون از جواب های قبلی تون
یه سوال دیگه  داشتم من با کد های زیر دادها رو دریافت میکنم
کد پی‌اچ‌پی:
package net.learn2develop.JSON;

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.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class 
JSONActivity extends Activity  {

    public 
String readJSONFeed(String URL) {
        
StringBuilder stringBuilder = new StringBuilder();
        
HttpClient client = new DefaultHttpClient();
        
HttpGet httpGet = new HttpGet(URL);
        try {
            
HttpResponse response client.execute(httpGet);
            
StatusLine statusLine response.getStatusLine();
            
int statusCode statusLine.getStatusCode();
            if (
statusCode == 200) {
                
HttpEntity entity response.getEntity();
                
InputStream content entity.getContent();
                
BufferedReader reader = new BufferedReader(
                        new 
InputStreamReader(content));
                
String line;
                while ((
line reader.readLine()) != null) {
                    
stringBuilder.append(line);
                }
            } else {
                
Log.e("JSON""Failed to download file");
            }
        } catch (
ClientProtocolException e) {
            
e.printStackTrace();
        } catch (
IOException e) {
            
e.printStackTrace();
        }
        return 
stringBuilder.toString();
    }
    
    private class 
ReadJSONFeedTask extends AsyncTask<StringVoidString> {
        protected 
String doInBackground(String... urls) {
            return 
readJSONFeed(urls[0]);
        }
        
        protected 
void onPostExecute(String result) {
            try {
                
JSONArray jsonArray = new JSONArray(result);
                
Log.i("JSON""Number of surveys in feed: " 
                        
jsonArray.length());

                
//---print out the content of the json feed---
                
for (int i 0jsonArray.length(); i++) {
                    
JSONObject jsonObject jsonArray.getJSONObject(i);
                
                    
Toast.makeText(getBaseContext(), jsonObject.getString("ms") + 
                            
" - " jsonObject.getString("time"), 
                            
Toast.LENGTH_SHORT).show();                
                    
                }
            } catch (
Exception e) {
                
e.printStackTrace();
            }        
        }
    }

    
/** Called when the activity is first created. */
    
@Override
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.main);
        
        
/*
        new ReadJSONFeedTask().execute("http://extjs.org.cn/extjs/examples/grid/survey.html");
        */
        
new ReadJSONFeedTask().execute("http://json.rayej.ir");
    }

ولی با پروژه کلیدستان نه اگه میشه بگین چکار کنم؟ تشکر.


 

این کد (رفرنس) میاد و برای مثال لینک زیر رو اگر ببینید:
http://extjs.org.cn/extjs/examples/grid/survey.html
میاد Array هارو میشماره ، با استفاده از این حلقه:
کد پی‌اچ‌پی:
for (int i 0jsonArray.length(); i++) 
بعد اونهارو در 
کد پی‌اچ‌پی:
Log.i("JSON""Number of surveys in feed: " jsonArray.length()); 
که میتونید با جستجو در لاگ ها خروجی رو پیدا کنید.
برا اینکه کدتون با JsonData شما جواب بده ، که در حال حاظر مشکلی نداره ، بعد از شمردن آرایه ها براتون در لاگ مشخص میکنه که با جستجوی : 
کد پی‌اچ‌پی:
Number of surveys in feed 
میتونید پیداش کنید.من این مورد رو با Toast براتون نمایش دادم:
کد پی‌اچ‌پی:
public class MainActivity extends Activity {


    
/** Called when the activity is first created. */
    
@Override
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.activity_main);

        
/*
        execute the function
        */
        
new ReadJSONFeedTask().execute("http://json.rayej.ir");
    }


    public 
String readJSONFeed(String URL) {
        
StringBuilder stringBuilder = new StringBuilder();
        
HttpClient client = new DefaultHttpClient();
        
HttpGet httpGet = new HttpGet(URL);
        try {
            
HttpResponse response client.execute(httpGet);
            
StatusLine statusLine response.getStatusLine();
            
int statusCode statusLine.getStatusCode();
            if (
statusCode == 200) {
                
HttpEntity entity response.getEntity();
                
InputStream content entity.getContent();
                
BufferedReader reader = new BufferedReader(
                        new 
InputStreamReader(content));
                
String line;
                while ((
line reader.readLine()) != null) {
                    
stringBuilder.append(line);
                }
            } else {
                
Log.e("JSON""Failed to download file");
            }
        } catch (
IOException e) {
            
e.printStackTrace();
        }
        return 
stringBuilder.toString();
    }

    private class 
ReadJSONFeedTask extends AsyncTask<StringVoidString> {
        protected 
String doInBackground(String... urls) {
            return 
readJSONFeed(urls[0]);
        }

        protected 
void onPostExecute(String result) {
            try {
                
JSONArray jsonArray = new JSONArray(result);
                
Toast.makeText(MainActivity.this"Number of Arrays is: " jsonArray.length(), Toast.LENGTH_SHORT).show();

                
//---print out the content of the json feed---
                
for (int i 0jsonArray.length(); i++) {
                    
JSONObject jsonObject jsonArray.getJSONObject(i);

                    
Toast.makeText(getBaseContext(), jsonObject.getString("ms") +
                                    
" - " jsonObject.getString("time"),
                            
Toast.LENGTH_SHORT).show();

                }
            } catch (
Exception e) {
                
e.printStackTrace();
            }
        }
    }



پس کد شما مشکلی نداشت.
ضمنا گویا متد هایی مثل HttpResponse و StatusLine و غیره منسوخ شده اند.بهتره به فکر جایگزین باشید.
بقیه موارد که در آرایه دارید نیز خیلی ساده با Toast نمایش داده میشند.
فقط میمونه که میخواید با اینها چیکار کنید؟ کجا نمایشش بدید و ...
موفق باشید

 

 
پاسخ
 سپاس شده توسط rayej.ir ، sohrabjam

در یافت اطلاعات از سرور با روش json (در اندروید)

#11
به نام خدا
سلام ،ببخشید میشه بگید که کد json زیر درست است یانه واگر هم اشتباه است درستش چگونه است ؟

 
کد پی‌اچ‌پی:
[ { "url""" ,"name""" "pages url""http://127.0.0.1/a/@amirrayej" ,"pages name""asdfjh fghd" }, { "url""http://127.0.0.1/a/@baba" ,"name""بعثت" ,"pages url""" ,"pages name""" }, { "url""http://127.0.0.1/a/@dada_" ,"name""خانواده" ,"pages url""" ,"pages name""" }, { "url""http://127.0.0.1/a/@alireza_" ,"name""ssss" ,"pages url""" ,"pages name""" }, { "url""http://127.0.0.1/a/@alireza_amirrayej" ,"name""ssssaass" ,"pages url""" ,"pages name""" }, { "ms":"rayej.ir""time":"" } ] 
 
پاسخ

در یافت اطلاعات از سرور با روش json (در اندروید)

#12
(۱۳۹۴/۰۳/۲۴, ۱۱:۳۷ ق.ظ)'rayej.ir' نوشته: به نام خدا
سلام ،ببخشید میشه بگید که کد json زیر درست است یانه واگر هم اشتباه است درستش چگونه است ؟
کد پی‌اچ‌پی:
[ { "url""" ,"name""" "pages url""http://127.0.0.1/a/@amirrayej" ,"pages name""asdfjh fghd" }, { "url""http://127.0.0.1/a/@baba" ,"name""بعثت" ,"pages url""" ,"pages name""" }, { "url""http://127.0.0.1/a/@dada_" ,"name""خانواده" ,"pages url""" ,"pages name""" }, { "url""http://127.0.0.1/a/@alireza_" ,"name""ssss" ,"pages url""" ,"pages name""" }, { "url""http://127.0.0.1/a/@alireza_amirrayej" ,"name""ssssaass" ,"pages url""" ,"pages name""" }, { "ms":"rayej.ir""time":"" } ] 
 

مشکلی نداره.یک آرایه 6 عنصری هست با مقادیری که واردشون کردید.
پست های قبل رو بخونید میتونید مشکلاتتون رو خودتون حل کنید.
پاسخ
 سپاس شده توسط rayej.ir


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)