我的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编程的新手,所以任何帮助将不胜感激。谢谢!干杯!
答案 0 :(得分:0)
您应该执行大多数数据库操作,尤其是在doInBackground()
方法中长时间运行。您还可以考虑ContentProvider
,因为它可以更好地优化活动生命周期。
http://developer.android.com/training/load-data-background/index.html