将JSON数据插入到android中的SQLite数据库中

2023-11-27

我想将 JSON 数组中的数据插入到 SQLite 数据库中。我创建了两个类 CategoryHelper.java 和 AndroidJSONParsingActivity.java 来获取 java 响应。当我运行代码时出现异常databaseHelper.saveCategoryRecord(id,name);我的 API 工作正常并为我提供数据。

我的代码如下:

类别助手.java

package com.androidhive.jsonparsing;

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

public class CategoryHelper {
    private static final int DATABASE_VERSION = 2;
    private static final String DATABASE_NAME = "category.db";
    private static final String TABLE_NAME = "tbcategory";
    public static final String CATEGORY_COLUMN_ID = "_id";
    public static final String CATEGORY_COLUMN_NAME = "name";
    Category openHelper;
    private SQLiteDatabase database;

    public CategoryHelper(Context context){
        openHelper = new Category(context);
        database = openHelper.getWritableDatabase();
    }
    public void saveCategoryRecord(String id, String name) {
        ContentValues contentValues = new ContentValues();
        contentValues.put(CATEGORY_COLUMN_ID, id);
        contentValues.put(CATEGORY_COLUMN_NAME, name);
        database.insert(TABLE_NAME, null, contentValues);
        }
    public Cursor getTimeRecordList() {
        return database.rawQuery("select * from " + TABLE_NAME, null);
        }
    private class Category extends SQLiteOpenHelper {

        public Category(Context context) {
            // TODO Auto-generated constructor stub
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            db.execSQL("CREATE TABLE " + TABLE_NAME + "( "
                    + CATEGORY_COLUMN_ID + " INTEGER PRIMARY KEY, "
                    + CATEGORY_COLUMN_NAME + " TEXT )" );

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXISTS"+ TABLE_NAME);
            onCreate(db);
        }

    }
}

AndroidJSONParsingActivity.java

package com.androidhive.jsonparsing;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.ListActivity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class AndroidJSONParsingActivity extends ListActivity {

    // url to make request
    private static String url="API TO GET THE DATA";
    // JSON Node names
    private static final String TAG_CATEGORY = "categories";
    private static final String TAG_CATEGORY_ID = "category_id";
    private static final String TAG_NAME = "name";
    private static final String TAG_IS_ACTIVE = "is_active";
    // contacts JSONArray
    JSONArray contacts = null;
    private CategoryHelper databaseHelper;
    //private SQLiteDatabase mydatabase = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Hashmap for ListView
        ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();

        // Creating JSON Parser instance
        JSONParser jParser = new JSONParser();

        // getting JSON string from URL
        JSONObject json = jParser.getJSONFromUrl(url);

        try {
            // Getting Array of Contacts
            contacts = json.getJSONArray(TAG_CATEGORY);

            // looping through All Contacts
            for(int i = 0; i < contacts.length(); i++){
                JSONObject c = contacts.getJSONObject(i);

                // Storing each json item in variable
                String id = c.getString(TAG_CATEGORY_ID);
                String name = c.getString(TAG_NAME);
                String  is_active = c.getString(TAG_IS_ACTIVE);

                databaseHelper.saveCategoryRecord(id,name);

                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();

                // adding each child node to HashMap key => value
                map.put(TAG_CATEGORY_ID, id);
                map.put(TAG_NAME, name);
                map.put(TAG_IS_ACTIVE, is_active);
                // adding HashList to ArrayList
                contactList.add(map);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }


        /**
         * Updating parsed JSON data into ListView
         * */
        ListAdapter adapter = new SimpleAdapter(this, contactList,
                R.layout.list_item,
                new String[] { TAG_NAME, TAG_IS_ACTIVE, TAG_CATEGORY_ID }, new int[] {
                        R.id.name, R.id.email, R.id.mobile });

        setListAdapter(adapter);

        // selecting single ListView item
        ListView lv = getListView();

        // Launching new screen on Selecting Single ListItem
        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // getting values from selected ListItem
                String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
                String cost = ((TextView) view.findViewById(R.id.email)).getText().toString();
                String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString();

                // Starting new intent
                Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
                in.putExtra(TAG_NAME, name);
                in.putExtra(TAG_IS_ACTIVE, cost);
                in.putExtra(TAG_CATEGORY_ID, description);
                startActivity(in);

            }
        });



    }

}

LOGCAT:

01-21 20:13:49.226: E/AndroidRuntime(301): FATAL EXCEPTION: main
01-21 20:13:49.226: E/AndroidRuntime(301): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidhive.jsonparsing/com.androidhive.jsonparsing.AndroidJSONParsingActivity}: java.lang.NullPointerException
01-21 20:13:49.226: E/AndroidRuntime(301):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-21 20:13:49.226: E/AndroidRuntime(301):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-21 20:13:49.226: E/AndroidRuntime(301):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-21 20:13:49.226: E/AndroidRuntime(301):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-21 20:13:49.226: E/AndroidRuntime(301):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-21 20:13:49.226: E/AndroidRuntime(301):  at android.os.Looper.loop(Looper.java:123)
01-21 20:13:49.226: E/AndroidRuntime(301):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-21 20:13:49.226: E/AndroidRuntime(301):  at java.lang.reflect.Method.invokeNative(Native Method)
01-21 20:13:49.226: E/AndroidRuntime(301):  at java.lang.reflect.Method.invoke(Method.java:521)
01-21 20:13:49.226: E/AndroidRuntime(301):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-21 20:13:49.226: E/AndroidRuntime(301):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-21 20:13:49.226: E/AndroidRuntime(301):  at dalvik.system.NativeStart.main(Native Method)
01-21 20:13:49.226: E/AndroidRuntime(301): Caused by: java.lang.NullPointerException
01-21 20:13:49.226: E/AndroidRuntime(301):  at com.androidhive.jsonparsing.AndroidJSONParsingActivity.onCreate(AndroidJSONParsingActivity.java:65)
01-21 20:13:49.226: E/AndroidRuntime(301):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-21 20:13:49.226: E/AndroidRuntime(301):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

请指导我如何将 JSON 数组数据插入数据库或哪里做错了。每一个回应都是值得赞赏的。


你忘记初始化databaseHelper对象在oncreate使用前先查看 Activity 的情况。

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        databaseHelper=new CategoryHelper(AndroidJSONParsingActivity.this);
        //your code here..........
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将JSON数据插入到android中的SQLite数据库中 的相关文章

  • 使用库来维护免费/付费的应用程序版本

    维护免费 付费应用程序版本的共识似乎是使用库 并从每个活动中设置一个标志 以从代码库中获取不同的功能 这有多安全 据我了解 一个人可以root他们的手机 获取APK 并且可以对其进行反编译 即使代码被混淆 也不难看出该应用程序是带有标志的包
  • 将正确的上下文传递给 greendao 的 OpenHelper 构造函数

    如果我理解正确的话 在使用数据库时 我必须执行以下操作 DaoMaster OpenHelper helper new DaoMaster OpenHelper this test db null Override public void
  • Retrofit-2 内容类型问题

    我的 Api 接受 Content Type application json 作为标头 我按照改造文档中所述完美设置了标题 Headers Content Type application json POST user classes C
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • finish() 完成活动但它仍然在后台

    我有一个关于 android studio 中活动的 finish 方法的问题 我有这个简单的代码 public class MainActivity extends AppCompatActivity Override protected
  • 如何使用 Firebase UI 在 recyclerView 中显示时从 Firebase 数据库中的子级引用父级

    我目前正在引用 quote text 子项 这些数据显示在recyclerview using firebase用户界面 我想获取 quote text 的父名称 如何获取 quote text 孩子的父母姓名 When user clic
  • 导航抽屉默认片段

    我是一名新手开发人员 我正在将导航抽屉与 android support v7 集成到我的应用程序中 我有一个问题 当我启动应用程序时 主要布局是这样的
  • 以编程方式将 TextView 添加到主屏幕小部件

    我想以编程方式将文本视图控件添加到我的主屏幕小部件 在下面的示例中 我使用 TextView 填充 Linearlayout 但是这里应该如何使用 RemoteView 它只接受 xml 资源布局作为参数 public class MyWi
  • 在 Jetpack Compose 中跨可组合函数重复使用一组预览注释

    在 Jetpack Compose 中迈出第一步 这非常令人惊奇 除了一个恼人的问题 我有一组固定的预览 正常 深色和 RTL Preview name Normal group Screen showBackground true Pre
  • 无法获取 Facebook 传入请求

    我正在尝试在我的 Facebook android 游戏应用程序中实现发送数据并接受该数据 我正在关注https developers facebook com docs android send requests notification
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • Android Studio - 值必须 ≥ 0

    我在 Android Studio 中收到与光标有关的错误 我的代码中有以下行 String data cursor getString cursor getColumnIndex columnIndex columnIndex 被传递到该
  • JavaDoc 在 Android 项目中不起作用

    我在 Ubuntu 10 04 上使用 Eclipse 3 5 2 进行 Android 开发 我安装了 来自 Ubuntu 存储库的 Sun JDK Eclipse 3 5 2 经典 来自 eclipse org 解压到 opt ecli
  • onClick 未在带有子项的 LinearLayout 上触发

    我有一个自定义的 LinearLayout 和一个较小的 TextView 子级 我希望能够单击 TextView 未覆盖的区域 因此我将 clickable true 和 onclicklistener 设置为 LinearLayout
  • 在为 Android 实现 Google 登录时,任务“:app:transformClassesWithDexForDebug”执行失败

    我正在尝试为 Android 实现 Google 登录 并且我正在按照以下说明进行操作 https developers google com identity sign in android start integrating https
  • Android - 9 补丁

    我正在尝试使用 9 块图片创建一个新的微调器背景 我尝试了很多方法来获得完美的图像 但都失败了 s Here is my 9 patch 当我用Draw 9 patch模拟时 内容看起来不错 但是带有箭头的部分没有显示 或者当它显示时 这部
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • 在没有 Wifi 的情况下获取 Android 设备的 MAC 地址

    如何获取没有 Wifi 接口的 Android 设备 例如 Android 模拟器 的网络接口的 MAC 地址 通过WifiManager返回获取的WifiInfonull EDIT 更清楚地说 我必须与本地网络上的现有网络协议 不是我设计
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户

随机推荐

  • React-Router v4:无法读取未定义的属性“路由”

    我想在按下按钮时重定向 所以我使用了withRouter获取历史道具的访问权限 但我收到错误 Uncaught TypeError Cannot read property route of undefined at Route compu
  • 查找 java.net.SocketException:没有可用的缓冲区空间

    嗨 我有一个非常丑陋的问题 java net SocketException 没有可用的缓冲区空间 已达到最大连接数 它是客户端 服务器应用程序 客户端是Windows XP SP2 32b 有两个网卡核心双核 Java 1 6 u7 应用
  • 通过相关模型 django 进行过滤

    如何通过相关模型生成query set 例如 我该怎么做 UserProfile objects filter user is active True Can t use user is active to filter 琐碎的问题 琐碎的
  • 使用 Java 8 可选的 Mapstruct

    我有这两门课 public class CustomerEntity Id GeneratedValue strategy GenerationType IDENTITY private long id private String fir
  • SQL Server 2008 R2 Varbinary 最大大小

    在 SQL Server 2008 R2 中使用 varbinary max 可以插入的文件的最大大小是多少 我试图将列中的最大值更改为超过 8 000 字节 但它不允许我这样做 所以我猜测最大值是 8 000 字节 但是从MSDN 上的这
  • launch4j exe本身没什么可说的,有人有建议吗?

    在Linux上运行 我使用launch4j来打包一个exe 我将 exe 复制到我的 Windows 7 VM 中并运行它 但什么也没发生 我用 l4j debug 运行它 但仍然没有任何反应 至少 如果有日志文件 我找不到它 我在这里缺少
  • 包不需要与 java 文件所在的子目录匹配吗?

    今天早上我正在为我的 java 认证编写一些练习程序 并注意到我输错了一个包名称 因此它与 java 文件所在的子目录不匹配 我编译了代码 预计会出现错误 但所有内容都编译了文件 甚至没有警告 我用谷歌搜索了一下 我读到的大多数页面都说包名
  • flutter web 的 http 请求被 Cors 策略阻止

    我有一个 Android Ios 和 Web 应用程序 使用 php 作为后端 所有 Api 在 android 和 ios 中都工作正常 但在 web 中抛出 CORS 错误 出现这样的错误 从源 http localhost 49168
  • Visual Studio 2013 安装 microsoft.net Framework 4.51 时出错

    我在安装 vs 2013 时遇到问题 下图显示了错误 我在 Google 上进行了大量研究 发现在 Windows 8 1 上 net Framework 4 5 1 现在已经成为操作系统的一部分 当 VS 2013 尝试安装 net Fr
  • 如何避免 nginx 在用作代理(proxy_pass)时用空格替换 %20 ?

    我使用 nginx 作为 apache 服务器的代理 这是我的配置 location subsite proxy pass http 127 0 0 1 subsite 1 query string 问题是 如果我发送带有 20 的请求 例
  • iPhone:通过本地通知增加应用程序徽章

    当应用程序未运行时 是否可以通过本地通知增加应用程序徽章 我知道如何设置徽章 但还没有找到任何方法来增加这个值 localNotification applicationIconBadgeNumber 23 Update 我找到了一个 远非
  • Oracle SQL 获取第 n 个元素正则表达式

    我正在尝试使用 Oracle 中的 SQL 获取逗号分隔字符串中的第 n 个元素 到目前为止我有以下 SELECT regexp substr 100016154 5101884LT00001 10000001089210000001265
  • WCF 自定义 Http 代理身份验证

    是否可以为 WCF 提供自定义代理地址和自定义凭据 我在 stackoverflow 上找到了这个答案 如何使用生成的 WCF 客户端的凭据设置代理 但我遇到了一个复杂的问题 我要进行身份验证的服务使用自己的身份验证 因此我必须使用两组凭据
  • Azure Ad b2c:通过邀请添加新成员用户

    我有一个Azure 广告 B2C在 Azure 上运行 我想在 B2C 中创建带有邀请的用户 我尝试创建来宾用户 但该用户无法登录 因为该用户是作为 B2B 用户创建的 我也尝试过手动添加用户 但我无法添加自己的域 例如 电子邮件受保护 但
  • Json.net 反序列化具有非字符串键类型的嵌套字典

    我正在使用 Json NET 反序列化一个对象 其中包含具有自定义 非字符串 键类型的嵌套字典 这是我正在尝试做的事情的示例 public interface IInterface String Name get set public cl
  • javascript - 比较不同格式的日期

    我有两个日期 我需要比较它们 看看其中一个是否大于另一个 但它们的格式不同 我不确定比较两个日期的最佳方法 格式为 1381308375118 这是 var futureDate 这是由创建的 var today new Date toda
  • 如何从自定义按钮调用数据表 csv 按钮

    需要从我的自定义按钮调用 csv 按钮
  • 网络音频启动和停止振荡器然后再次启动

    我正在尝试启动和停止声音 那行得通 但我无法再次启动声音 我真的需要再次制作另一个振荡器吗 这看起来非常不直观 一定会有更好的办法 这就是我所拥有的一切 oscillator1 noteOn 0 oscillator1 noteOff 0
  • PHPSESSID 未保存到 cookie

    保存会话 ID 的 PHPSESSID 变量未保存到客户端 cookie 中 这会导致每次我调用时都会生成一个新的会话 IDsession start 功能 当我使用 FireFox Opera 和 Chrome 时 情况就是如此 对于 s
  • 将JSON数据插入到android中的SQLite数据库中

    我想将 JSON 数组中的数据插入到 SQLite 数据库中 我创建了两个类 CategoryHelper java 和 AndroidJSONParsingActivity java 来获取 java 响应 当我运行代码时出现异常data