如何在publishProgress函数中调用数据库插入函数

时间:2014-09-08 14:45:35

标签: android database android-asynctask

我的AsyncTask代码如下:

class LoginDetails extends AsyncTask<String, String, String>{

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        pDialog=new ProgressDialog(LoginActivity.this);
        pDialog.setMessage("Retrieving Data...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        String user=username.getText().toString();
        String pass=password.getText().toString();
        UserFunctions userFunctions=new UserFunctions();
        JSONObject json=userFunctions.loginUser(user, pass);

        try{

            if(json.getString(KEY_SUCCESS)!=null){  
                String res=json.getString(KEY_SUCCESS);
                if(Integer.parseInt(res)==1){
                    JSONArray tab=json.getJSONArray(TABLES);

                    //For TeacherTB data extraction
                    JSONObject TeacherTBJson=tab.getJSONObject(0);
                    String TeacherTB=TeacherTBJson.getString(T_NAME);
                    System.out.println(TeacherTB);
                    JSONArray tdata1=TeacherTBJson.getJSONArray(T_DATA);
                    JSONObject teachdata=tdata1.getJSONObject(0);
                    String teachID=teachdata.getString(TEACH_ID);   //TeachID data extraction
                    System.out.println(teachID);
                    String teachName=teachdata.getString(TEACH_NAME);   //TeachName data extraction
                    System.out.println(teachName);
                    String teachUser=teachdata.getString(TEACH_USER);   //Username data extraction
                    System.out.println(teachUser);
                    String teachPass=teachdata.getString(TEACH_PASS);   //Password data extraction
                    System.out.println(teachPass);
                    db.insertTeachTB(teachID, teachName, teachUser, teachPass);

                    //For ClassSubTB data extraction
                    JSONObject ClassSubTBJson=tab.getJSONObject(1);
                    String ClassSubTB=ClassSubTBJson.getString(T_NAME);
                    System.out.println(ClassSubTB);
                    JSONArray tdata2=ClassSubTBJson.getJSONArray(T_DATA);
                    System.out.println(tdata2.length());
                    JSONObject classSubid=tdata2.getJSONObject(0);
                    JSONArray classSubidArr=classSubid.getJSONArray(CS_ID);
                    JSONArray classIDArr=classSubid.getJSONArray(CLASS_ID);
                    JSONArray subIDArr=classSubid.getJSONArray(SUB_ID);
                    JSONArray teachidArr=classSubid.getJSONArray(TEACH_ID);
                    for(int i=0;i<classSubidArr.length();i++)
                    {
                        JSONArray classSubidArray=classSubidArr.getJSONArray(i);
                        JSONArray classidArray=classIDArr.getJSONArray(i);
                        JSONArray subidArray=subIDArr.getJSONArray(i);
                        JSONArray teachidArray=teachidArr.getJSONArray(i);
                        for(int j=0;j<classSubidArray.length();j++)
                        {
                            String csid=classSubidArray.getString(j);
                            String classid=classidArray.getString(j);
                            String subid=subidArray.getString(j);
                            String teachid=teachidArray.getString(j);
                            db.insertClassSubTB(csid, classid, subid, teachid);
                        }
                    }


                }
                else {
                    System.out.println("OOPS ERROR!");
                }
            }

        }catch(JSONException e){
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        pDialog.dismiss();
    }   


}

我正在进行一些数据插入,并将该代码写入另一个实例为db的类中。 经过一些研究后我才知道下面的行应该用publishProgress函数编写。

db.insertTeachTB(teachID, teachName, teachUser, teachPass);  

关于如何在publishProgress中调用数据库插入函数,我处于十字路口。我是这种Android编程的新手,所以任何帮助将不胜感激。谢谢!干杯!

1 个答案:

答案 0 :(得分:0)

您应该执行大多数数据库操作,尤其是在doInBackground()方法中长时间运行。您还可以考虑ContentProvider,因为它可以更好地优化活动生命周期。 http://developer.android.com/training/load-data-background/index.html