2014-04-10 98 views
0

即时通讯初学者与android编程。我有简单的问题..我不知道该怎么开始。我带了别人的代码。我需要获取所有信息保存在这个数据库表中,并将其转换为json字符串。我怎么能这样做?Json字符串到java对象

下面的代码:

package com.project.sqlite; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DatabaseDataHandler extends SQLiteOpenHelper { 

    // All Static variables 
    // Database Version 
    private static final int DATABASE_VERSION = 3; 

    // Database Name 
    private static final String DATABASE_NAME = "simplify_1"; 

    // DATA table name 
    private static final String TABLE_DATA = "FORMS"; 

    // DATA Table Columns names 
    private static final String KEY_DATA_ID = "id"; 
    private static final String KEY_OBJECT_ID = "objectID"; 
    private static final String KEY_TYPE = "type"; 
    private static final String KEY_DATE = "date"; 
    private static final String KEY_JSON = "json"; 

    public DatabaseDataHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String CREATE_DATA_TABLE = "CREATE TABLE " + TABLE_DATA + "(" 
       + KEY_DATA_ID + " INTEGER PRIMARY KEY," + KEY_OBJECT_ID + " TEXT," + KEY_TYPE + " TEXT," 
       + KEY_DATE + " DATE," + KEY_JSON + " TEXT" + ")"; 
     db.execSQL(CREATE_DATA_TABLE); 
    } 

    // Upgrading database 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     // Drop older table if existed 
     db.execSQL("DROP TABLE IF EXISTS " + TABLE_DATA); 

     // Create tables again 
     onCreate(db); 
    } 

    /** 
    * All CRUD(Create, Read, Update, Delete) Operations 
    */ 

    // Add new DATA 
    public void addData(Data data) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_OBJECT_ID, data.getObjectID()); 
     values.put(KEY_TYPE, data.getType()); 
     values.put(KEY_DATE, data.getDate()); 
     values.put(KEY_JSON, data.getJson()); 

     // Inserting Row 
     db.insert(TABLE_DATA, null, values); 
     db.close(); // Closing database connection 
    } 

    // Getting All DATA 
    public List<Data> getAllData() { 
     List<Data> dataList = new ArrayList<Data>(); 
     // Select All Query 
     String selectQuery = "SELECT * FROM " + TABLE_DATA; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 

     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do { 
       Data data = new Data(); 
       data.setID(Integer.parseInt(cursor.getString(0))); 
       data.setObjectID(cursor.getString(1)); 
       data.setType(cursor.getString(2)); 
       data.setDate(cursor.getString(3)); 
       data.setJson(cursor.getString(4)); 
       // Adding contact to list 
       dataList.add(data); 
      } while (cursor.moveToNext()); 
     } 

     // return user list 
     return dataList; 
    } 


} 

这里是我的班,我想这样做:

import java.util.TimerTask; 

import com.project.sqlite.DatabaseDataHandler; 

import android.util.Log; 

public class Data_synch extends TimerTask { 
    DatabaseDataHandler db = new DatabaseDataHandler(this); 
    @Override 
    public void run() { 

    } 
    } 

你能告诉我正确的方式?

UPDATE 我得到一个eror在这一行:

DatabaseDataHandler db = new DatabaseDataHandler(this); 

应界定什么情况?

+0

请参阅链接http://stackoverflow.com/questions/18857884/how-to-convert-arraylist-of-custom-class-to-jsonarray-in-java将您的列表更改为JSONArray,然后调用toString( )来获取JSON字符串。 – Priya

+0

“this”是用于引用当前实例的关键字。这里的“this”是TimerTask而不是Activity。您必须传递活动或应用程序上下文。 – drulabs

+0

我如何获得上下文?我应该从哪里拿到它? – user3416113

回答

1

你有没有试过谷歌的GSON转换JSON对象到Java对象。太好了。

这里的下载链接gson 2.2.4

只需添加到您的libs文件夹。在一行代码中,您可以将java对象转换为json,反之亦然。

样品:

让我们说你的JSON对象是这个

JSONObject myJson = {"name":"Tony Stark","group":"avengers","occupation":"superhero"} 

Java类必须具有匹配的状态名称

class JsonToJAVA { 
    string name, 
    string group, 
    string occupation, 
} 

这里是你如何在同一行转换:

JsonToJAVA j = gson.fromJson(myJson.toString(), JsonToJAVA.class); 

只是初始化GSON某处

Gson gson = new Gson(); 

有你有你的类(以上j)的代表JSON的一个实例。随意在JsonToJAVA类中添加getter setter或任何其他您想要的方法。

在GSON中有另一种方法将json()转换成json。

希望这会有所帮助。