asynctask sqlite不会更新

时间:2015-03-26 14:58:28

标签: android sqlite android-asynctask

我正在为我的项目制作一个注册屏幕。将注册数据发送到Web数据库后,我希望应用程序还更新本地sqlite数据库,以便下次用户打开应用程序时,如果注册成功,则他/她不需要执行相同的操作。我的应用程序正在更新Web数据库没有问题但是当我尝试使用第二个asynctask进行sqlite更新时它不会更新sqlite,我缺少什么? :(

这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register);

    final EditText vmail=(EditText) findViewById(R.id.editText1);
    final EditText vpassword=(EditText) findViewById(R.id.editText2);
    final EditText vnickname=(EditText) findViewById(R.id.editText3);




    Button button2=(Button) findViewById(R.id.button1);
    button2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            mail=vmail.getText().toString();
            password=vpassword.getText().toString();
            mynickname=vnickname.getText().toString();
            new AsyncTaskClass().execute();
        }
    });
}
class AsyncTaskClass extends AsyncTask<Void, Void, String> {

    @Override
    protected void onPreExecute() {


    }
    @Override
    protected String doInBackground(Void... params) {
        String reverseString =null;

        try
        {
            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("mail",mail));
            nameValuePairs.add(new BasicNameValuePair("password",password));
            nameValuePairs.add(new BasicNameValuePair("mynickname",mynickname));
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("wwwmysite.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String response = httpclient.execute(httppost, responseHandler); 
            reverseString = response;
        } catch (ClientProtocolException e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        } catch (IOException e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        }

        return reverseString;
    }


    protected void onPostExecute(String reverseString) {
         if (reverseString.contains("success")){
             new AsyncTaskClass2().execute();                
        }else{
            Toast.makeText(getApplicationContext(), reverseString, Toast.LENGTH_LONG).show();
        }
    }
}
class AsyncTaskClass2 extends AsyncTask<Void, Void, String> {

    @Override
    protected void onPreExecute() {


    }
    @Override
    protected String doInBackground(Void... params) {
        String reverseString =null;
        try
        {
            KayitEkle(Array.get(nameValuePairs, 0).toString(),Array.get(nameValuePairs, 1).toString(),Array.get(nameValuePairs, 2).toString());
        } catch (Exception e) {
            Log.e("log_tag", "Error converting result " + e.toString());
        }
        return reverseString;
    }


    protected void onPostExecute(String reverseString) {
        startActivity(new Intent(registergame.this, (mygamescreen.class)));
    }
}
 private void KayitEkle(String nick, String mail, String password){       
     SQLiteDatabase db = users.getWritableDatabase();
     ContentValues veriler = new ContentValues();
     veriler.put("nick", nick);
     veriler.put("mail",mail);
     veriler.put("password",password);
     db.insertOrThrow("ogrenciisim", null, veriler);
 }

}

2 个答案:

答案 0 :(得分:0)

调试器以查看它是否实际调用AsyncTaskClass2 doInBackground()方法。如果是,则检查方法insertOrThrow()返回的值。如果返回值为-1,则需要检查该值。这个link会给你一些见解

答案 1 :(得分:0)

您只在第一个AsyncTask的doInBackground-Method中声明了您的nameValuePairs-variable:

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

如果你使用你的类属性nameValuePairs:

,你可以简单地解决它
nameValuePairs = new ArrayList<NameValuePair>();

但是作为一般方面,我没有看到为什么你应该使用第二个AsyncTask的任何原因。你为什么不打电话给方法

KayitEkle(Array.get(nameValuePairs, 0).toString(),Array.get(nameValuePairs, 1).toString(),Array.get(nameValuePairs, 2).toString());

在第一个AsyncTask的doInBackground-Method中?