【问题标题】:Json string to java objectsJson字符串到java对象
【发布时间】:2014-04-10 08:27:43
【问题描述】:

我是 android 编程的初学者。我有一个简单的问题.. 我不知道从什么开始。我拿了别人的代码。我需要获取此数据库表中的所有信息并将其转换为 json 字符串。我该怎么做?

代码如下:

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() {

    }
    }

你能告诉我正确的方法吗?

更新 我在这一行出现错误:

DatabaseDataHandler db = new DatabaseDataHandler(this);

应该定义什么上下文??

【问题讨论】:

  • 参考链接stackoverflow.com/questions/18857884/… 将您的列表更改为 JSONArray,然后调用 toString() 以获取 JSON 字符串。
  • "this" 是用于引用当前实例的关键字。这里的“this”是 TimerTask 而不是 Activity。您必须传递活动或应用程序上下文。
  • 我如何获得上下文?我应该从哪里拿它?
  • 您必须从活动中调用它。在 Data_Synch 构造函数中从那里传递 getApplicationContext() 或使用集中式应用程序类来保持上下文。

标签: java android sql json


【解决方案1】:

您是否尝试过 google 的 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();

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

GSON中还有一个方法toJson()可以将java类转成json。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2021-03-20
    • 2014-03-05
    相关资源
    最近更新 更多