如何在android中使用singleton类将多个值解析到数据库?
我正在构建一个android应用程序,其中所有的值都是 使用截取以json数据的形式从URL解析到我的应用程序。现在我 要将此解析值存储到本地数据库中 我尝试使用singleton类将值存储在数据库中。 现在我面临的问题是,只有最后一个值 解析为singleton类的set函数,插入到我的 本地数据库,但其余值不是。我正在插入 单击按钮即可将值添加到我的数据库中 这是我的代码,我正在解析URL中的值并将其设置为 独生子女班-如何在android中使用singleton类将多个值解析到数据库?,android,json,database,sqlite,singleton,Android,Json,Database,Sqlite,Singleton,我正在构建一个android应用程序,其中所有的值都是 使用截取以json数据的形式从URL解析到我的应用程序。现在我 要将此解析值存储到本地数据库中 我尝试使用singleton类将值存储在数据库中。 现在我面临的问题是,只有最后一个值 解析为singleton类的set函数,插入到我的 本地数据库,但其余值不是。我正在插入 单击按钮即可将值添加到我的数据库中 这是我的代码,我正在解析URL中的值并将其设置为 独生子女班- package tabsswipe; public class Fra
package tabsswipe;
public class FragmentPlay extends Fragment {
private static final String TAG = FragmentPlayo.class.getSimpleName();
// Movies json url
private static final String url = "http://URL/api/user/_id/host";
private ProgressDialog pDialog;
private List<Sigleton_class> movieList = new ArrayList<Sigleton_class>();
private ListView listView;
private CustomListAdapter adapter;
DatabaseHelper dbh;
public static ArrayList<String> array;
ImageView hostbtn;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_play,
container, false);
return rootView;
}
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
// Creating volley request obj
JsonArrayRequest movieReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
hidePDialog();
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Sigleton_class movie = new Sigleton_class();
movie.setTitle(obj.getString("venue"));
movie.setGender(obj.getString("gender"));
movie.setAddinfo(obj.getString("addinfo"));
// adding movie to movies array
movieList.add(movie);
} catch (JSONException e) {
e.printStackTrace();
}
}
// notifying list adapter about data changes
// so that it renders the list view with updated data
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
hidePDialog();
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(movieReq);
}
@Override
public void onDestroy() {
super.onDestroy();
hidePDialog();
}
private void hidePDialog() {
if (pDialog != null) {
pDialog.dismiss();
pDialog = null;
}
}
}
这是我的datahelper类
package com.example.mydatabase;
导入android.util.Log;
公共类数据库助手{
sqlitedb数据库;
DbHelper-DbHelper;
//语境;
公共静态最终字符串DB_NAME=“contact”;
公共静态最终整数DB_VER=4;
公共静态最终字符串TBL_NAME=“info”;
公共静态最终字符串COL_ID=“_ID”;
公共静态最终字符串COL_EMAIL=“EMAIL”;
公共静态最终字符串COL_PWORD=“password”;
公共静态最终字符串COL_MOBILE=“MOBILE”;
String[]allColumns={COL_ID,COL_EMAIL,COL_PWORD,COL_MOBILE};
公共数据库助手(上下文)
{
dbHelper=新的dbHelper(上下文);
db=dbHelper.getWritableDatabase();
}
公共无效添加数据(列表mov){
(西格尔顿级电影:mov){
ContentValues=新的ContentValues();
value.put(COL_EMAIL,movie.getTitle());
value.put(COL_PWORD,movie.getDate());//获取名称
value.put(COL_MOBILE,movie.getAddinfo());//获取电话号码
//插入触点
db.插入(待定名称、列ID、值);
}
db.close();
}
公共长地址(字符串电子邮件、字符串密码、字符串移动)
{
长i=0;
ContentValues cv=新的ContentValues();
简历(COL_电子邮件、电子邮件);
cv.put(COL_PWORD,PWORD);
cv.put(COL_MOBILE,MOBILE);
i=数据库插入(待定名称、列ID、cv);
返回i;
}
公共游标getRec(字符串strMail)
{
游标cur=null;
如果((strMail==null)和(&(strMail.length()==0))
{
cur=db.query(TBL_名称,所有列,null,null,null,null,null);
//“如“'+name+“%””,
}
其他的
{
字符串sel[]={strMail+“%”字符集“%”;
//cur=db.query(TBL_名称,所有列,
//COL_EMAIL+“like'”+strMail+“%”,null,null,null,null);
cur=db.query(待定名称、所有列、列电子邮件+“like”、sel、,
空,空,空);
}
返回电流;
}
公共长更新(int-id、String-email、String-pw、String-mob)
{
长i=0;
ContentValues cv=新的ContentValues();
简历(COL_电子邮件、电子邮件);
cv.put(COL_PWORD,pw);
个人简历(COL_MOBILE,mob);
i=db.update(TBL_NAME,cv,COL_ID+“=?”,新字符串[]{String.valueOf(ID)});
返回i;
}
公共长deleteRec(int-id)
{
长i=0;
i=db.delete(TBL_NAME,COL_ID+“=?”,新字符串[]{String.valueOf(ID)});
返回i;
}
公共游标fetchAllRec()
{
db=dbHelper.getReadableDatabase();
游标cur=null;
cur=db.query(TBL_名称,所有列,null,null,null,null,null);
如果(cur!=null)
{
cur.moveToFirst();
}
返回电流;
}
公共类DbHelper扩展了SQLiteOpenHelper
{
公共DbHelper(上下文)
{
super(上下文、数据库名称、null、数据库版本);
//TODO自动生成的构造函数存根
}
@凌驾
public void onCreate(SQLiteDatabase db){
//TODO自动生成的方法存根
String createSql=“create table”+TBL\u NAME+”(“+COL\u ID+
整数主键自动递增+
COL_电子邮件+“文本(50),”+COL_PWORD+“文本(40),”
+COL_MOBILE+“文本(50))”;
Log.d(“创建”,createSql);
execSQL(createSql);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
//TODO自动生成的方法存根
db.execSQL(“如果存在删除表”+TBL_NAME);
onCreate(db);
}
}
}
试着把你的问题和网络操作总结在一起——这总是个坏主意。使用服务或异步任务。@yaa110我已经更新了我的问题,你能帮我吗now@brummfondel好的,我将使用asynctask。请你帮我解决这个问题有很多问题,例如dbh没有初始化,addData()没有被调用(这可能会填充数据库),addData()关闭数据库进行所有其他调用,等等。请提供你得到的错误,这样我们就可以开始解决你遇到的问题(除此之外,你稍后会得到…对不起)。
package volley_signleton_pck;
import java.util.ArrayList;
public class Sigleton_class {
private static String title;
private String thumbnailUrl;
private static String gender;
private String recurring;
private static String addinfo;
private String players;
private String date;
private String venue;
private String time;
private String sportname;
private int year;
private double rating;
private ArrayList<String> genre;
public Sigleton_class() {
}
public Sigleton_class(String name, String thumbnailUrl, int year, double rating,String
gender,String recurring,String addinfo,
String player,String date,String venue,String time,String sportname,
ArrayList<String> genre) {
this.title = name;
this.thumbnailUrl = thumbnailUrl;
this.year = year;
this.rating = rating;
this.genre = genre;
this.gender = gender;
this.recurring = recurring;
this.addinfo = addinfo;
this.players = player;
this.date = date;
this.venue = venue;
this.time = time;
this.sportname = sportname;
}
public static String getTitle() {
return title;
}
public void setTitle(String name) {
this.title = name;
}
public String getThumbnailUrl() {
return thumbnailUrl;
}
public void setThumbnailUrl(String thumbnailUrl) {
this.thumbnailUrl = thumbnailUrl;
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public double getRating() {
return rating;
}
public void setRating(double rating) {
this.rating = rating;
}
public ArrayList<String> getGenre() {
return genre;
}
public void setGenre(ArrayList<String> genre) {
this.genre = genre;
}
public static String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getRecurring() {
return recurring;
}
public void setRecurring(String recurring) {
this.recurring = recurring;
}
public static String getAddinfo() {
return addinfo;
}
public void setAddinfo(String addinfo) {
this.addinfo = addinfo;
}
public String getPlayers() {
return players;
}
public void setPlayers(String players) {
this.players = players;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getVenue() {
return venue;
}
public void setVenue(String venue) {
this.venue = venue;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getSportname() {
return sportname;
}
public void setSportname(String sportname) {
this.sportname = sportname;
}
}
btnSave = (Button) findViewById(R.id.btnSave);
btnSave.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
long res = dbh.addRec(Sigleton_class.getTitle(),
Sigleton_class.getGender(), Sigleton_class.getAddinfo());
if (res > 0) {
AlertDialog.Builder build = new AlertDialog.Builder(
MainActivity_DB.this);
build.setTitle("Success");
build.setMessage("Record inserted successfully");
build.setNeutralButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
etMail.setText(" ");
etPword.setText(" ");
etMobile.setText(" ");
}
});
build.show();
}
}
});
package com.example.mydatabase;
import android.util.Log;
public class DatabaseHelper {
SQLiteDatabase db;
DbHelper dbHelper;
//Context mContext;
public static final String DB_NAME = "contact";
public static final int DB_VER = 4;
public static final String TBL_NAME = "info";
public static final String COL_ID = "_id";
public static final String COL_EMAIL = "email";
public static final String COL_PWORD = "password";
public static final String COL_MOBILE = "mobile";
String[] allColumns ={COL_ID, COL_EMAIL, COL_PWORD, COL_MOBILE};
public DatabaseHelper(Context context)
{
dbHelper = new DbHelper(context);
db = dbHelper.getWritableDatabase();
}
public void addData(List<Sigleton_class> mov) {
for (Sigleton_class movie : mov) {
ContentValues values = new ContentValues();
values.put(COL_EMAIL, movie.getTitle());
values.put(COL_PWORD, movie.getDate());//get name
values.put(COL_MOBILE, movie.getAddinfo());//get phone number
//insert contact
db.insert(TBL_NAME, COL_ID, values);
}
db.close();
}
public long addRec(String email, String pword, String mobile)
{
long i=0;
ContentValues cv = new ContentValues();
cv.put(COL_EMAIL, email);
cv.put(COL_PWORD, pword);
cv.put(COL_MOBILE, mobile);
i=db.insert(TBL_NAME, COL_ID, cv);
return i;
}
public Cursor getRec(String strMail)
{
Cursor cur = null;
if((strMail==null)&&(strMail.length()==0))
{
cur = db.query(TBL_NAME, allColumns, null, null,null,null, null);
//"like '" +name+"%'",
}
else
{
String sel[] = {strMail+"'%'"};
// cur= db.query(TBL_NAME, allColumns,
// COL_EMAIL+ " like '"+ strMail + "%'" ,null, null, null, null);
cur = db.query(TBL_NAME, allColumns, COL_EMAIL+ " like ", sel,
null,null, null);
}
return cur;
}
public long updateRec(int id, String email, String pw, String mob)
{
long i=0;
ContentValues cv = new ContentValues();
cv.put(COL_EMAIL, email);
cv.put(COL_PWORD, pw);
cv.put(COL_MOBILE, mob);
i=db.update(TBL_NAME, cv, COL_ID+"=?", new String[]{String.valueOf(id)});
return i;
}
public long deleteRec(int id)
{
long i=0;
i=db.delete(TBL_NAME, COL_ID + "=?" , new String[]{String.valueOf(id)});
return i;
}
public Cursor fetchAllRec()
{
db= dbHelper.getReadableDatabase();
Cursor cur= null;
cur = db.query(TBL_NAME, allColumns, null, null, null, null, null);
if(cur != null)
{
cur.moveToFirst();
}
return cur;
}
public class DbHelper extends SQLiteOpenHelper
{
public DbHelper(Context context)
{
super(context, DB_NAME, null, DB_VER);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String createSql = "create table " + TBL_NAME + "(" +COL_ID +
" INTEGER primary key autoincrement," +
COL_EMAIL + " TEXT(50)," + COL_PWORD + " TEXT(40),"
+COL_MOBILE + " TEXT(50))";
Log.d("Create ", createSql);
db.execSQL(createSql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TBL_NAME);
onCreate(db);
}
}
}