Android-完成任务后插入数据库
我对Java(&android)非常陌生,因此尽管搜索范围很广,但我的知识有限,无法解决这个问题 在下面的代码中,我希望通过AsyncTask从weblink获取JASONArray。之后,我想从数组数据填充数据库 为此,我创建了RemoteConnectivity类,在该类中,我可以使用JASONArray中的所有数据填充ArrayList importdata。但问题是,我无法从RemoteConnectivity类内部访问我的数据库类mylibmandbhandler(我猜是因为它没有扩展到Activity)。在ImportExport类中,如果我在调用RemoteConnectivity().execute()之后编写要插入到数据库中的代码[如下面的代码所示],它会在执行结束之前开始插入(很明显,因为它是AsyncTask的属性) 现在,有谁能给我指点迷津吗?或任何链接,请了解整个过程(我在至少50页的阅读中迷失了自己:()) p.S.mylibmandbhandler是我在包src文件夹中为数据库操作创建的类(不是活动)Android-完成任务后插入数据库,android,database,class,android-asynctask,Android,Database,Class,Android Asynctask,我对Java(&android)非常陌生,因此尽管搜索范围很广,但我的知识有限,无法解决这个问题 在下面的代码中,我希望通过AsyncTask从weblink获取JASONArray。之后,我想从数组数据填充数据库 为此,我创建了RemoteConnectivity类,在该类中,我可以使用JASONArray中的所有数据填充ArrayList importdata。但问题是,我无法从RemoteConnectivity类内部访问我的数据库类mylibmandbhandler(我猜是因为它没有扩展
public class ImportExport extends Activity {
public void webimport(View v){
new RemoteConnectivity().execute(); // START OF ASYNCTASK
//INSERT importdata INTO DATABASE AFTER EXECUTE
mylibmandbhandler db = new mylibmandbhandler(this);
for (String[] s : importdata){
db.addRecord(new mylibman(s));
}
}
final ArrayList<String[]> importdata = new ArrayList<String[]>();
private class RemoteConnectivity extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... arg0) {
..................
..................
importdata.add(dataline); // POPULATE ARRAYLIST IMPORTDATA
return null;
}
@Override
protected void onPostExecute(Void result1)
{
// WHAT TO WRITE HERE
}
}
}
公共类导入端口扩展活动{
公共void webimport(视图v){
新建RemoteConnectivity().execute();//开始异步任务
//执行后将importdata插入数据库
mylibmandbhandler db=新的mylibmandbhandler(此);
对于(字符串[]s:importdata){
db.addRecord(新mylibman);
}
}
最终ArrayList importdata=新ArrayList();
私有类RemoteConnectivity扩展异步任务
{
@凌驾
受保护的Void doInBackground(Void…arg0){
..................
..................
importdata.add(数据线);//填充ARRAYLIST importdata
返回null;
}
@凌驾
受保护的void onPostExecute(void result1)
{
//在这里写什么
}
}
}
您应该在onPostExecute
中插入数据,如下所示:
public class ImportExport extends Activity {
public void webimport(View v){
new RemoteConnectivity().execute(); // START OF ASYNCTASK
}
final ArrayList<String[]> importdata = new ArrayList<String[]>();
private class RemoteConnectivity extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... arg0) {
..................
..................
importdata.add(dataline); // POPULATE ARRAYLIST IMPORTDATA
return null;
}
@Override
protected void onPostExecute(Void result1)
{
//INSERT importdata INTO DATABASE AFTER EXECUTE FINISH (POST EXECUTE)
mylibmandbhandler db = new mylibmandbhandler(ImportExport.this);
for (String[] s : importdata){
db.addRecord(new mylibman(s));
}
}
}
}
更新:我在回答中要强调的重要一点是,我使用了
新的mylibmandbhandler(ImportExport.this);
而不是新的mylibmandbhandler(this)作为此引用的异步任务
不是构造函数所支持的。您需要使用方法onPostExecute将数据插入datatable。如下所示:
private class RemoteConnectivity extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... arg0) {
..................
..................
importdata.add(dataline); // POPULATE ARRAYLIST IMPORTDATA
return null;
}
@Override
protected void onPostExecute(Void result1)
{
//INSERT importdata INTO DATABASE AFTER EXECUTE FINISH (POST EXECUTE)
mylibmandbhandler db = new mylibmandbhandler(ImportExport.this);
for (String[] s : importdata){
db.addRecord(new mylibman(s));
}
}
}
私有类RemoteConnectivity扩展异步任务
{
@凌驾
受保护的Void doInBackground(Void…arg0){
..................
..................
importdata.add(数据线);//填充ARRAYLIST importdata
返回null;
}
@凌驾
受保护的void onPostExecute(void result1)
{
//执行完成后(执行后)将导入数据插入数据库
mylibmandbhandler db=新的mylibmandbhandler(ImportExport.this);
对于(字符串[]s:importdata){
db.addRecord(新mylibman);
}
}
}
当然,我一开始是这么做的……但问题是mylibmandbhandler给出了错误“构造函数mylibmandbhandler(ImportExport.RemoteConnectivity)未定义”@AbdullahFahim看到了编辑过的答案。这是因为“this”引用了该位置的AsyncTask对象。您需要将其指定为“ImportExport.this”。问题是,如果我将onPostExecute方法new mylibmandbhandler放入其中,mylibmandbhandler会出现错误“构造函数mylibmandbhandler(ImportExport.RemoteConnectivity)未定义”(ImportExport.this);
是我想的钥匙。哦,对不起,错过了……让我试试
private class RemoteConnectivity extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... arg0) {
..................
..................
importdata.add(dataline); // POPULATE ARRAYLIST IMPORTDATA
return null;
}
@Override
protected void onPostExecute(Void result1)
{
//INSERT importdata INTO DATABASE AFTER EXECUTE FINISH (POST EXECUTE)
mylibmandbhandler db = new mylibmandbhandler(ImportExport.this);
for (String[] s : importdata){
db.addRecord(new mylibman(s));
}
}
}