无法将 XML 已解析的响应保存到数据库
Not able to save XML parsed response to database
我正在使用 XMLPullParser 解析 Web 服务响应,并希望将其存储在本地数据库中,以便能够减少网络流量,因为 API 对于移动设备来说不是最有效的。
我已经创建了数据库 class 但不确定如何将响应放入数据库然后使用它来获取我的信息 我需要填充我的列表视图或再次点击该服务以在需要时获取更多数据因为数据库没有。
我的DatabaseHandler.java
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "contactManager";
private static final String TABLE_CONTACTS = "contacts";
//Contacts table columns names
private static final String KEY_ID = "Employee_number";
private static final String KEY_FIRST_NAME = "First_name";
private static final String KEY_LAST_NAME = "Last_name";
private static final String KEY_PHONE_NUMBER_MOBILE = "Phone_mobile";
private static final String KEY_PHONE_NUMBER_OFFICE = "Phone_office";
private static final String KEY_PAYROLL_TITLE = "Payroll_title";
private static final String KEY_HAS_DIRECT_REPORTS = "Has_direct_reports";
private static final String KEY_EMAIL = "Email";
private static final String KEY_COST_CENTER = "Cost_center_id";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " STRING PRIMARY KEY," + KEY_FIRST_NAME + " TEXT,"
+ KEY_LAST_NAME + " TEXT"
+ KEY_PHONE_NUMBER_MOBILE + " TEXT"
+ KEY_PHONE_NUMBER_OFFICE + " TEXT"
+ KEY_PAYROLL_TITLE + " TEXT"
+ KEY_HAS_DIRECT_REPORTS + " TEXT"
+ KEY_EMAIL + " TEXT"
+ KEY_COST_CENTER + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//drop old table if existence
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
//Create table again
onCreate(db);
}
//Add new contact
public void addContact(PeepWithPic peepWithPic) {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_FIRST_NAME, peepWithPic.getFirst_name());
values.put(KEY_LAST_NAME, peepWithPic.getLast_name());
values.put(KEY_PHONE_NUMBER_MOBILE, peepWithPic.getPhone_mobile());
values.put(KEY_PHONE_NUMBER_OFFICE, peepWithPic.getPhone_office());
values.put(KEY_HAS_DIRECT_REPORTS, peepWithPic.getHas_direct_reports());
values.put(KEY_EMAIL, peepWithPic.getEmail());
values.put(KEY_COST_CENTER, peepWithPic.getCost_center_id());
//Inserting Row
database.insert(TABLE_CONTACTS, null, values);
database.close();
}
//Get single contact
public PeepWithPic getContact(int employeeNumber) {
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.query(TABLE_CONTACTS, new String[] {
KEY_ID, KEY_FIRST_NAME, KEY_LAST_NAME, KEY_PHONE_NUMBER_OFFICE, KEY_PHONE_NUMBER_MOBILE,
KEY_HAS_DIRECT_REPORTS, KEY_EMAIL, KEY_COST_CENTER}, KEY_ID + "=?",
new String[]{ String.valueOf(employeeNumber)}, null, null, null, null);
if( cursor != null)
cursor.moveToFirst();
PeepWithPic peepWithPic = new PeepWithPic(cursor.getString(0),
cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4),
cursor.getString(5), cursor.getString(6), cursor.getString(7), cursor.getString(8),
cursor.getString(9), cursor.getString(10), cursor.getString(11), cursor.getString(12),
cursor.getString(12), cursor.getString(14), cursor.getString(15), cursor.getString(16),
cursor.getString(17), cursor.getString(18), cursor.getString(19), cursor.getString(20),
cursor.getString(21), cursor.getString(22), cursor.getString(23), cursor.getString(24),
cursor.getString(24), cursor.getString(25), cursor.getString(26));
return peepWithPic;
}
//Get All Contacts
public List<PeepWithPic> getAllContacts() {
List<PeepWithPic> contactList = new ArrayList<>();
//Select all query
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
//looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
PeepWithPic peepWithPic = new PeepWithPic();
peepWithPic.setEmployee_number(cursor.getString(7));
peepWithPic.setFirst_name(cursor.getString(9));
peepWithPic.setLast_name(cursor.getString(11));
peepWithPic.setPhone_office(cursor.getString(19));
peepWithPic.setPhone_mobile(cursor.getString(18));
peepWithPic.setHas_direct_reports(cursor.getString(10));
peepWithPic.setEmail(cursor.getString(6));
peepWithPic.setCost_center_id(cursor.getString(4));
} while (cursor.moveToNext());
}
//return contat list
return contactList;
}
//Get contact Count
public int getContactCount() {
String countQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.rawQuery(countQuery, null);
cursor.close();
return cursor.getCount();
}
//Updating single contact
public int updateContact(PeepWithPic peepWithPic){
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_FIRST_NAME, peepWithPic.getFirst_name());
values.put(KEY_LAST_NAME, peepWithPic.getLast_name());
values.put(KEY_PHONE_NUMBER_MOBILE, peepWithPic.getPhone_mobile());
values.put(KEY_PHONE_NUMBER_OFFICE, peepWithPic.getPhone_office());
values.put(KEY_HAS_DIRECT_REPORTS, peepWithPic.getHas_direct_reports());
values.put(KEY_EMAIL, peepWithPic.getEmail());
values.put(KEY_COST_CENTER, peepWithPic.getCost_center_id());
return database.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
new String[] {String.valueOf(peepWithPic.getEmployee_number())});
}
//Delete single contact
public void deletedContact(PeepWithPic peepWithPic) {
SQLiteDatabase database = this.getWritableDatabase();
database.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[] {String.valueOf(peepWithPic.getEmployee_number())});
database.close();
}
}
有网络调用和listview的MainActivity
public class MainActivity extends AppCompatActivity {
ListView tappedListView, directReportListView;
ProgressBar mProgressBar;
ArrayList<PeepWithPic> mPeepWithPics = new ArrayList<>();
ListViewAdapter mAdapter;
DatabaseHandler databaseHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* if toolbar is wanted by user uncomment
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);*/
tappedListView = (ListView) findViewById(R.id.contactListView);
directReportListView = (ListView) findViewById(R.id.clickedContactLV);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mProgressBar.setVisibility(View.VISIBLE);
mAdapter = new ListViewAdapter(this, mPeepWithPics);
tappedListView.setAdapter(mAdapter);
directReportListView.setAdapter(mAdapter);
getXMLData();
databaseHandler = new DatabaseHandler(mPeepWithPics); // error is here
}
//Uncomment to add OptionsMenu(three dots on app bar) if needed
/*@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}*/
private static OkHttpClient getUnsafeOkHttpClient() {
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(5, TimeUnit.MINUTES)
.writeTimeout(5, TimeUnit.MINUTES)
.readTimeout(5, TimeUnit.MINUTES);
builder.sslSocketFactory(sslSocketFactory);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
return builder.build();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void getXMLData() {
OkHttpClient client = getUnsafeOkHttpClient();
Request request = new Request.Builder()
.url(getString(R.string.API_FULL_URL))
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
final String responseData = response.body().string();
final InputStream stream = new ByteArrayInputStream(responseData.getBytes());
XMLPullParserHandler parserHandler = new XMLPullParserHandler();
final ArrayList<PeepWithPic> peepWithPics = (ArrayList<PeepWithPic>) parserHandler.parse(stream);
mPeepWithPics.clear();
mPeepWithPics.addAll(peepWithPics);
//tell adapter on the UI thread its data changed
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
tappedListView.setVisibility(View.VISIBLE);
directReportListView.setVisibility(View.VISIBLE);
mProgressBar.setVisibility(View.GONE);
}
});
}
});
}
}
上线databseHandler = new DatabaseHandler(mPeepWithPics);我收到一条错误消息:Error:(59, 47) error: incompatible types: ArrayList cannot be converted to Contex.不知道那是什么意思。我只是想保存我对数据库的 OkHttp3 调用的响应,这样我就可以使用数据库来显示信息,或者在需要时再次调用以获取更多数据,因为此 Web 服务非常慢。
我将其添加到构造函数中。我知道得到 Error:(59, 72) error: incompatible types: ArrayList cannot be converted to PeepWithPic.对如何传递它有点困惑,因为我需要传递模型以保存到 localDB,但我需要它作为 ArrayList 以在 ListView 适配器中显示它。
databaseHandler = new DatabaseHandler(getApplicationContext(), mPeepWithPics); //this is in MainActivity
private final PeepWithPic peepWithPic;
public DatabaseHandler(Context context, PeepWithPic peepWithPic) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.peepWithPic = peepWithPic;
}
DatabaseHandler 构造函数参数是上下文,但您注入了您的模型。
改变这个:
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
到
public DatabaseHandler(Context context, Mymodel model) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.model = model;
}
I am getting an error that says Error:(59, 47) error: incompatible
types: ArrayList cannot be converted to Contex. Not sure what that
even means.
您应该考虑进行一些基本的 Java 培训,以便您能够理解 IDE 给您的信息。这告诉您构造函数需要一个 Context
而您正试图传递一个 ArrayList
。您需要传入一个 Context
,可能是 MainActivity
实例 (this
).
我正在使用 XMLPullParser 解析 Web 服务响应,并希望将其存储在本地数据库中,以便能够减少网络流量,因为 API 对于移动设备来说不是最有效的。
我已经创建了数据库 class 但不确定如何将响应放入数据库然后使用它来获取我的信息 我需要填充我的列表视图或再次点击该服务以在需要时获取更多数据因为数据库没有。
我的DatabaseHandler.java
public class DatabaseHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "contactManager";
private static final String TABLE_CONTACTS = "contacts";
//Contacts table columns names
private static final String KEY_ID = "Employee_number";
private static final String KEY_FIRST_NAME = "First_name";
private static final String KEY_LAST_NAME = "Last_name";
private static final String KEY_PHONE_NUMBER_MOBILE = "Phone_mobile";
private static final String KEY_PHONE_NUMBER_OFFICE = "Phone_office";
private static final String KEY_PAYROLL_TITLE = "Payroll_title";
private static final String KEY_HAS_DIRECT_REPORTS = "Has_direct_reports";
private static final String KEY_EMAIL = "Email";
private static final String KEY_COST_CENTER = "Cost_center_id";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
+ KEY_ID + " STRING PRIMARY KEY," + KEY_FIRST_NAME + " TEXT,"
+ KEY_LAST_NAME + " TEXT"
+ KEY_PHONE_NUMBER_MOBILE + " TEXT"
+ KEY_PHONE_NUMBER_OFFICE + " TEXT"
+ KEY_PAYROLL_TITLE + " TEXT"
+ KEY_HAS_DIRECT_REPORTS + " TEXT"
+ KEY_EMAIL + " TEXT"
+ KEY_COST_CENTER + " TEXT" + ")";
db.execSQL(CREATE_CONTACTS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//drop old table if existence
db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS);
//Create table again
onCreate(db);
}
//Add new contact
public void addContact(PeepWithPic peepWithPic) {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_FIRST_NAME, peepWithPic.getFirst_name());
values.put(KEY_LAST_NAME, peepWithPic.getLast_name());
values.put(KEY_PHONE_NUMBER_MOBILE, peepWithPic.getPhone_mobile());
values.put(KEY_PHONE_NUMBER_OFFICE, peepWithPic.getPhone_office());
values.put(KEY_HAS_DIRECT_REPORTS, peepWithPic.getHas_direct_reports());
values.put(KEY_EMAIL, peepWithPic.getEmail());
values.put(KEY_COST_CENTER, peepWithPic.getCost_center_id());
//Inserting Row
database.insert(TABLE_CONTACTS, null, values);
database.close();
}
//Get single contact
public PeepWithPic getContact(int employeeNumber) {
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.query(TABLE_CONTACTS, new String[] {
KEY_ID, KEY_FIRST_NAME, KEY_LAST_NAME, KEY_PHONE_NUMBER_OFFICE, KEY_PHONE_NUMBER_MOBILE,
KEY_HAS_DIRECT_REPORTS, KEY_EMAIL, KEY_COST_CENTER}, KEY_ID + "=?",
new String[]{ String.valueOf(employeeNumber)}, null, null, null, null);
if( cursor != null)
cursor.moveToFirst();
PeepWithPic peepWithPic = new PeepWithPic(cursor.getString(0),
cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4),
cursor.getString(5), cursor.getString(6), cursor.getString(7), cursor.getString(8),
cursor.getString(9), cursor.getString(10), cursor.getString(11), cursor.getString(12),
cursor.getString(12), cursor.getString(14), cursor.getString(15), cursor.getString(16),
cursor.getString(17), cursor.getString(18), cursor.getString(19), cursor.getString(20),
cursor.getString(21), cursor.getString(22), cursor.getString(23), cursor.getString(24),
cursor.getString(24), cursor.getString(25), cursor.getString(26));
return peepWithPic;
}
//Get All Contacts
public List<PeepWithPic> getAllContacts() {
List<PeepWithPic> contactList = new ArrayList<>();
//Select all query
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
//looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
PeepWithPic peepWithPic = new PeepWithPic();
peepWithPic.setEmployee_number(cursor.getString(7));
peepWithPic.setFirst_name(cursor.getString(9));
peepWithPic.setLast_name(cursor.getString(11));
peepWithPic.setPhone_office(cursor.getString(19));
peepWithPic.setPhone_mobile(cursor.getString(18));
peepWithPic.setHas_direct_reports(cursor.getString(10));
peepWithPic.setEmail(cursor.getString(6));
peepWithPic.setCost_center_id(cursor.getString(4));
} while (cursor.moveToNext());
}
//return contat list
return contactList;
}
//Get contact Count
public int getContactCount() {
String countQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.rawQuery(countQuery, null);
cursor.close();
return cursor.getCount();
}
//Updating single contact
public int updateContact(PeepWithPic peepWithPic){
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_FIRST_NAME, peepWithPic.getFirst_name());
values.put(KEY_LAST_NAME, peepWithPic.getLast_name());
values.put(KEY_PHONE_NUMBER_MOBILE, peepWithPic.getPhone_mobile());
values.put(KEY_PHONE_NUMBER_OFFICE, peepWithPic.getPhone_office());
values.put(KEY_HAS_DIRECT_REPORTS, peepWithPic.getHas_direct_reports());
values.put(KEY_EMAIL, peepWithPic.getEmail());
values.put(KEY_COST_CENTER, peepWithPic.getCost_center_id());
return database.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
new String[] {String.valueOf(peepWithPic.getEmployee_number())});
}
//Delete single contact
public void deletedContact(PeepWithPic peepWithPic) {
SQLiteDatabase database = this.getWritableDatabase();
database.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[] {String.valueOf(peepWithPic.getEmployee_number())});
database.close();
}
}
有网络调用和listview的MainActivity
public class MainActivity extends AppCompatActivity {
ListView tappedListView, directReportListView;
ProgressBar mProgressBar;
ArrayList<PeepWithPic> mPeepWithPics = new ArrayList<>();
ListViewAdapter mAdapter;
DatabaseHandler databaseHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* if toolbar is wanted by user uncomment
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);*/
tappedListView = (ListView) findViewById(R.id.contactListView);
directReportListView = (ListView) findViewById(R.id.clickedContactLV);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mProgressBar.setVisibility(View.VISIBLE);
mAdapter = new ListViewAdapter(this, mPeepWithPics);
tappedListView.setAdapter(mAdapter);
directReportListView.setAdapter(mAdapter);
getXMLData();
databaseHandler = new DatabaseHandler(mPeepWithPics); // error is here
}
//Uncomment to add OptionsMenu(three dots on app bar) if needed
/*@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}*/
private static OkHttpClient getUnsafeOkHttpClient() {
try {
// Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return new java.security.cert.X509Certificate[]{};
}
}
};
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.connectTimeout(5, TimeUnit.MINUTES)
.writeTimeout(5, TimeUnit.MINUTES)
.readTimeout(5, TimeUnit.MINUTES);
builder.sslSocketFactory(sslSocketFactory);
builder.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
return builder.build();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void getXMLData() {
OkHttpClient client = getUnsafeOkHttpClient();
Request request = new Request.Builder()
.url(getString(R.string.API_FULL_URL))
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
final String responseData = response.body().string();
final InputStream stream = new ByteArrayInputStream(responseData.getBytes());
XMLPullParserHandler parserHandler = new XMLPullParserHandler();
final ArrayList<PeepWithPic> peepWithPics = (ArrayList<PeepWithPic>) parserHandler.parse(stream);
mPeepWithPics.clear();
mPeepWithPics.addAll(peepWithPics);
//tell adapter on the UI thread its data changed
runOnUiThread(new Runnable() {
@Override
public void run() {
mAdapter.notifyDataSetChanged();
tappedListView.setVisibility(View.VISIBLE);
directReportListView.setVisibility(View.VISIBLE);
mProgressBar.setVisibility(View.GONE);
}
});
}
});
}
}
上线databseHandler = new DatabaseHandler(mPeepWithPics);我收到一条错误消息:Error:(59, 47) error: incompatible types: ArrayList cannot be converted to Contex.不知道那是什么意思。我只是想保存我对数据库的 OkHttp3 调用的响应,这样我就可以使用数据库来显示信息,或者在需要时再次调用以获取更多数据,因为此 Web 服务非常慢。
我将其添加到构造函数中。我知道得到 Error:(59, 72) error: incompatible types: ArrayList cannot be converted to PeepWithPic.对如何传递它有点困惑,因为我需要传递模型以保存到 localDB,但我需要它作为 ArrayList 以在 ListView 适配器中显示它。
databaseHandler = new DatabaseHandler(getApplicationContext(), mPeepWithPics); //this is in MainActivity
private final PeepWithPic peepWithPic;
public DatabaseHandler(Context context, PeepWithPic peepWithPic) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.peepWithPic = peepWithPic;
}
DatabaseHandler 构造函数参数是上下文,但您注入了您的模型。
改变这个:
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
到
public DatabaseHandler(Context context, Mymodel model) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.model = model;
}
I am getting an error that says Error:(59, 47) error: incompatible types: ArrayList cannot be converted to Contex. Not sure what that even means.
您应该考虑进行一些基本的 Java 培训,以便您能够理解 IDE 给您的信息。这告诉您构造函数需要一个 Context
而您正试图传递一个 ArrayList
。您需要传入一个 Context
,可能是 MainActivity
实例 (this
).