有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java安卓:将json保存到sqlite

我是安卓和java的新手,我想将一个表从SQLServer(外部数据库)保存到sqlite(内部数据库)。 1.我的json没有被存储,每个记录都像这个“com.example.db_客户端”一样。DeptTable@b3e4e9e0“当我在sqlite浏览器中打开db文件时,我不明白这是什么

  1. 当我运行我的应用程序时,我有时会遇到这个异常,有时不会

    致命异常:主 进程:com。实例db_客户端,PID:1697 JAVAlang.IllegalArgumentException:活动DeptActivity未指定父活动名称。(您是否忘记在清单中添加安卓.support.PARENT_活动元素?)

我真的需要帮助,请调查我的问题。提前谢谢

数据库助手类的代码

    public class SqliteDB {

    public static final String KEY_ID = "no";
    public static final String KEY_NAME = "name";

    private static final String TAG = "DBAdapter";
    private static final String DATABASE_NAME = "SQLiteDB";

    private static final String TABLE_NAME = "Department";
    private static final int DATABASE_VERSION = 2;

    private static final String CREATE_TABLE = 
            "create table departmentList (id INTEGER PRIMARY KEY, name TEXT);";
    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public SqliteDB(Context ctx) {

        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }
    private static class DatabaseHelper extends SQLiteOpenHelper {
        DatabaseHelper(Context context) {           
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
        public void onCreate(SQLiteDatabase db) {           
            try {
                    db.execSQL(CREATE_TABLE);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {   
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS sample");
            onCreate(db);
            }
        }

  //---open SQLite DB---
    public SqliteDB open() throws SQLException {    
        db = DBHelper.getWritableDatabase();
        return this;
    }

    //---close SQLite DB---
    public void close() {   
        DBHelper.close();
    }

    //---insert data into SQLite DB---
    public long insert(String name) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_NAME, name);      
        return db.insert(TABLE_NAME, null, initialValues);
    }

    //---Delete All Data from table in SQLite DB---
    public void deleteAll() {
        db.delete(TABLE_NAME, null, null);
    }

    //---Get All Contacts from table in SQLite DB---
    public Cursor getAllData() {
        return db.query(TABLE_NAME, new String[] {KEY_NAME}, 
                null, null, null, null, null);
    }

}

活动类别代码

public class DeptActivity extends Activity{


    ArrayAdapter<String> adapter;
    ListView listv;
    Context context;
    ArrayList<String> data;
    SqliteDB sqlite;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_dept);

          sqlite = new SqliteDB(DeptActivity.this);

          setupActionBar();
          data = new ArrayList<String>();
          listv = (ListView) findViewById(R.id.lv_dept);
          context = this;

          adapter = new ArrayAdapter<String>(this,安卓.R.layout.simple_list_item_1, data);
          listv.setAdapter(adapter);
          Toast.makeText(this,"Loading Please Wait..",Toast.LENGTH_SHORT).show();
          new AsyncLoadDeptDetails().execute();
    }
    public class AsyncLoadDeptDetails extends
          AsyncTask<Void, JSONObject, ArrayList<DeptTable>> {
          ArrayList<DeptTable> deptTable = null;

          @Override
          public ArrayList<DeptTable> doInBackground(Void... params) {
                // TODO Auto-generated method stub

                RestAPI api = new RestAPI();
                try {
                       JSONObject jsonObj = api.GetDepartmentDetails();
                       JSONParser parser = new JSONParser();
                       Log.i( "department list", jsonObj.toString()); 
                       deptTable = parser.parseDepartment(jsonObj);
                       sqlite();

                } catch (Exception e) {
                }
          return deptTable;
      }


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

            sqlite.open();
        for(int i=0; i<deptTable.size(); i++) {

                sqlite.insert(deptTable.get(i).toString());

            }

            sqlite.close();
        }   

          @Override
          protected void onPostExecute(ArrayList<DeptTable> result) {
                // TODO Auto-generated method stub

                for (int i = 0; i < result.size(); i++) {
                      data.add(result.get(i).getNo() + " " + result.get(i).getName());
                }

                adapter.notifyDataSetChanged();

                Toast.makeText(context,"Loading Completed",Toast.LENGTH_SHORT).show();
          } }

我想保存在sqlite db中的表如下所示。 号码姓名 1工程 2.财务 3商业

公营部门{

 int no;
 String name;

 public DeptTable(int no, String name) {
       super();
       this.no = no;
       this.name = name;
 }

可删除类的代码

public DeptTable() {
       super();
       this.no=0;
       this.name = null;
 }

 public int getNo() {
       return no;
 }
 public void setNo(int no) {
       this.no = no;
 }
 public String getName() {
       return name;
 }
 public void setName(String name) {
       this.name = name;
 }

} json解析器类的代码

public class JSONParser  {

public JSONParser()
{
super();
}

public ArrayList<DeptTable> parseDepartment(JSONObject object)
{
      ArrayList<DeptTable> arrayList=new ArrayList<DeptTable>();
      try {
            JSONArray jsonArray=object.getJSONArray("Value");
            JSONObject jsonObj=null;
            for(int i=0;i<jsonArray.length();i++)
            {
                  jsonObj =jsonArray.getJSONObject(i);
                  arrayList.add(new DeptTable(jsonObj.getInt("no"), jsonObj.getString("name")));
            }

      } catch (JSONException e) {
            // TODO Auto-generated catch block
            Log.d("JSONParser => parseDepartment", e.getMessage());
      }
      return arrayList;
}

public boolean parseUserAuth(JSONObject object)
{     boolean userAtuh=false;
            try {
                  userAtuh = object.getBoolean("Value");
            } catch (JSONException e) {
                  // TODO Auto-generated catch block
                  Log.d("JSONParser => parseUserAuth", e.getMessage());
            }

            return userAtuh; }

舱单代码

<uses-sdk
    安卓:minSdkVersion="8"
    安卓:targetSdkVersion="21" />

<uses-permission 安卓:name="安卓.permission.INTERNET" />

<application
    安卓:allowBackup="true"
    安卓:icon="@drawable/ic_launcher"
    安卓:label="@string/app_name"
    安卓:theme="@style/AppTheme" >
    <activity
        安卓:name=".MainActivity"
        安卓:label="@string/app_name" >
        <intent-filter>
            <action 安卓:name="安卓.intent.action.MAIN" />

            <category 安卓:name="安卓.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        安卓:name="com.example.db_client.DeptActivity"
        安卓:label="@string/app_name" >
     </activity>

</application>
</manifest>

在这里输入代码


共 (1) 个答案

  1. # 1 楼答案

    如果你想使用toString方法,这个类必须实现toString方法,否则它只会返回默认的for对象,你会发现它没有那么有用。(这是“com.example.db_”客户端。DeptTable@b3e4e9e0)。要实现它,只需键入这样做

    @Override
    public String toString() {
        //What you want to return here.
    }
    

    但是我猜你想给数据库添加一些值,所以你想像这样调用你的类的getter方法

    private void sqlite() {
        sqlite.open();
        for(int i=0; i<deptTable.size(); i++) {
            sqlite.insert(deptTable.get(i).getName());
        }
        sqlite.close();
    }
    

    您需要像这样将android:parentActivityName字段添加到DeptActivity

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
    
    <uses-permission android:name="android.permission.INTERNET" />
    
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.db_client.DeptActivity"
            android:label="@string/app_name"
            android:parentActivityName=".MainActivity">
         </activity>
    
    </application>
    </manifest>