کلیدستان

نسخه‌ی کامل: ذخیره کردن json در sqllite (در برنامه نویسی اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
بابت سایت خوبتون ممنون .
من با توجه مبحث زیر json را دریافت کردم. الان میخواهم انرا در یک sqlite ذخیره کنم. ممنون میشم کمکم کنید
http://www.kelidestan.com/keys/keys.php?key=2651
سلام.
ممنون. 
هنگامی که متن ساختاریافته به روش json را به صورت رشته (String) داشته باشیم، تنها کافی است که از دستورات مربوط به ذخیره یک متن (رشته - String) در یک جدول از پایگاه داده SQLite استفاده کنیم :

http://www.kelidestan.com/keys/categorie...ategory=23

اگر متن ساختاریافته به شکل json را به صورت رشته (String) دارید که مشکلی نیست، اما اگر آن را به صورت رشته (String) ندارید، ابتدا باید JSONObject را به یک رشته (String) تبدیل کنیم.
برای این منظور، با فرض اینکه JSONObject دارای نام myJSONObject باشد، کد زیر را می نویسیم :

کد پی‌اچ‌پی:
String str myJSONObject.toString(); 

بعدا می توان این متن را از پایگاه داده فراخوانی کرد، آن را به یک JSONObject تبدیل کرده (کلید شماره 311) و سپس پردازش های مورد نظرمان را بر روی آن انجام بدهیم.

بابت پاسختان واقعا ممنون
یک هفتی اوی ی سایت خارجی مطرح کردم ولی جوابی تشتیدم 
من ی کد نوشتم رشته را ذخیره کنم ولی اررور میده

http://stackoverflow.com/questions/28169...to-sqllite

اگه میشه یه نگاهی بندازین. 

این هم کد 
نقل قول:
public class MainActivity extends ListActivity 


    InputStream is = null;
    String ip = "http://192.168.56.1/2.txt";
    String line = null;
    String result = null;
    public String[] list1, list2;

    SQLiteDB sqlite_obj;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        sqlite_obj = new SQLiteDB(MainActivity.this);

        try {

            URL url = new URL(ip);
            executeReq(url);
            webserviceCall();
            Toast.makeText(getBaseContext(), "Data from Webservice", Toast.LENGTH_SHORT).show();
        }
        catch(Exception e) {
            sqlitecall();
            Toast.makeText(getBaseContext(), "Data from SQLite DB", Toast.LENGTH_SHORT).show();
        }

        setListAdapter(new ListViewAct(this, list1, list2));
    }

    private void executeReq(URL url) throws IOException {
        // TODO Auto-generated method stub

        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setReadTimeout(3000);
        con.setConnectTimeout(3500);
        con.setRequestMethod("GET");
        con.setDoInput(true);

        // Connect
        con.connect();
    }

    private void webserviceCall() {
        // TODO Auto-generated method stub

        try {

            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(ip);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();
        }
        catch (Exception e) {
            Log.e("Webservice 1", e.toString());
        }
        try {

            BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;

            while((line = reader.readLine()) != null) {

                sb.append(line + "\n");
            }

            is.close();
            result = sb.toString();         
        }
        catch (Exception e) {
            Log.e("Webservice 2", e.toString());
        }
        try {

            JSONArray ja = new JSONArray(result);
            JSONObject jo = null;

            list1 = new String[ja.length()];
            list2 = new String[ja.length()];

            for(int i=0; i<ja.length(); i++) {

                jo = ja.getJSONObject(i);
                list1[i] = jo.getString("id");
                list2[i] = jo.getString("name");
            }           
        }catch (Exception e) {
            Log.e("Webservice 3", e.toString());
        }

        sqlite_obj.open();

        sqlite_obj.deleteAll();

        for(int i=0; i<list1.length; i++) {

            sqlite_obj.insert(list1[i].toString(), list2[i].toString());
        }
        sqlite_obj.close();
    }   

    private void sqlitecall() {
        // TODO Auto-generated method stub

        sqlite_obj.open();
        Cursor c = sqlite_obj.getAllData();

        list1 = new String[c.getCount()];
        list2 = new String[c.getCount()];

        if (c.moveToFirst())
        {
            int i=0;
            do {
                DisplayContact(c, i);
                i++;
            } while (c.moveToNext());
        }
        sqlite_obj.close();
    }

    private void DisplayContact(Cursor c, int i) {
        // TODO Auto-generated method stub

        list1[i] = c.getString(0);
        list2[i] = c.getString(1);  
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {

        //get selected items
        String selectedValue = (String) getListAdapter().getItem(position);
        Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show();
    }
یا اینکه کل رشته json را به عنوان یک رکورد داخل جدول ذخیره کنم؟
(۱۳۹۳/۱۱/۱۰, ۰۱:۰۸ ق.ظ)'aliazad' نوشته: [ -> ]یا اینکه کل رشته json را به عنوان یک رکورد داخل جدول ذخیره کنم؟

 


بله کل رشته را در یک ستون (Column) از جدول ذخیره کنید.
در صورت مواجه شدن با خطا، خطایابی کنید :

کلید شماره 813


 
ایا راهی هست که به صورت منتاظر از تا به sqlite انتقال داد
id ---->id
name---->name
city---->city
اساتید درست میگن  همچنین  
شما میتونید مقادیر رو از جیسون بگیرید و توی سه تا آرایه ذخیره کنید ..list1,list2, list3  مثل دستور زیر

کد پی‌اچ‌پی:
list1 = new String[ja.length()];
                    
list2 = new String[ja.length()];
                    
list3 =  new String[ja.length()];
                    for(
int i=0i<ja.length(); i++) {

                        
jo ja.getJSONObject(i);
                        
list1[i] = jo.getString("id");
                        
list2[i] = jo.getString("name");
                        
list3[i] = jo.getString("city");
                    } 

        بعد از اینکار شما حالا 3 تا آرایه دارید که مقادیر داخل اونا ذخیره شده....دیگه بیشتر کار رو انجام دادید میمونه فقط ذخیره کردن آن..
        میتونید واسه ذخیره  از ظرف ContentValues دخل دیتابیس  استفاده کنید ..که مثل یه ظرف هر چی خواستید میریزید داخلش و بعد اون پاس میدید داخل دیتابیس..
        از متد زیر میتونید استفاده کنید..

کد پی‌اچ‌پی:
public void Save_to_Sqlite()
        {
         
SQLiteDatabase dataBase=openOrCreateDatabase(pathMODE_PRIVATEnull);
             
Cursor cursor=dataBase.rawQuery("SELECT name,id , city FROM T1;"null);
            
             
                
ContentValues values=new ContentValues();
                for(
int i=0;i<list1.lenght();i++)
                {
                
values.put("id"list1[i]);
                
values.put("name"list2[i]);
                
values.put("city"list3[i]);
                
dataBase.insert("T1"nullvalues);
                }
                
dataBase.close();
        } 

این حلقه هربار که اجرا میشه یه ردیف داخل دیتابیس ذخیره میکنه با استفاده از ContentValues
امیدوارم کمکتون کرده باشم...
اساتید و دوستان جسارت من ببخشید