Приложение зависает или падает при отправке данных в форме регистрации, во второй раз ... Первый раз, когда он работает отлично - PullRequest
0 голосов
/ 10 июня 2010

ниже - это код формы регистрации, когда мы нажимаем второй раз, чтобы отправить введенные данные, приложение рушится и выдает ошибку, просто отображая dialog_thread .... При выполнении самого первого раза оно ром прекрасно ............ код dialog_thread дан после onClick () .... Пожалуйста, помогите мне, как избавиться от этой проблемы и позволить приложению работать без сбоев .....

PLZ HELP ME FAST ...

public void onClick (View arg0) {// TODO Сгенерированный автоматически метод заглушки

    alert_dialog ad=new alert_dialog();

    try
    {
        if(arg0==signup)
        {
            if(password.getText().toString().equals(confirm_password.getText().toString()))
            {
                //**** Start loading dialog thread

                dt=new dialog_thread(this);
                Log.i("dialog thread","Object created");

                dt.start();
                Log.i("dialog thread","thread started");

                String message=null;
                Integer success=null;

                //************ Encrypt the password
                String encrypt_password=new md5(password.getText().toString()).getEncryped();

                //************* create name value pair
                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

                nameValuePairs.add(new BasicNameValuePair("username",username.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("password",encrypt_password));
                nameValuePairs.add(new BasicNameValuePair("email",email.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("func","signup"));
                nameValuePairs.add(new BasicNameValuePair("user_type",s.getSelectedItem().toString()));

                DBConnect db=new DBConnect();
                String result=db.fetch_data(nameValuePairs);
                //******** Toast.makeText(this, result, Toast.LENGTH_LONG).show();

                //************* Parse JSONArray returned

                JSONArray jArray = new JSONArray(result);

                for(int i=0;i<jArray.length();i++)
                {
                    JSONObject json_data = jArray.getJSONObject(i);                 
                    success=json_data.getInt("success");                    
                    message=json_data.getString("message");                 
                }

                //************ Stop loading dialog thread
                dt.stop_execution();

                if(success==1)
                    Toast.makeText(this,"You have sucessfully signed up", Toast.LENGTH_LONG).show();
                else
                    {                       
                        ad.alertbox(this, "", message);
                    }
            }
            else
                ad.alertbox(this, "", "Error : Please enter the same password");
        }
    }catch(Exception e)
    {
        Log.i("Exception in signup",e.toString());
    }
}

}

(ЭТОТ КОД ЕСТЬВ РАЗНОМ ФАЙЛЕ)

класс dialog_thread расширяет Поток {

ProgressDialog pd;
Context c;
String title="Working ...";
String msg="Please Wait ...";

dialog_thread(Context cont)
{
    c=cont;
}

dialog_thread(Context cont,String title,String msg)
{
    c=cont;
    this.title=title;
    this.msg=msg;
}

public void run() 
{
    // TODO Auto-generated method stub
  try
    {
        Looper.prepare();
        pd = ProgressDialog.show(c, this.title, this.msg, true, false);
        Handler handler = new Handler() 
                                {               
                                    public void handleMessage(Message msg) 
                                        {
                                            //pd.dismiss();                                          
                                            Log.i("Handler","Inside handler");
                                            Log.i("dissmissing thread",msg.toString());
                                        }               
                                };
        handler.sendEmptyMessage(0);
        Log.i("TRy block","Executed");
        Looper.loop();  
    }
    catch(Exception e)
    {
        Log.i("Exception in dialog thread",e.toString());
    }
//************************ Run ends here    
}

public void stop_execution()
{
    pd.dismiss();
    this.stop();
}

// **************** Класс заканчивается здесь
}

1 Ответ

0 голосов
/ 10 июня 2010

В Java вы не можете перезапустить поток.В вашем onClick воссоздайте тему.Просто вызов его конструктора снова будет работать.Это работает в первый раз, потому что поток еще не был остановлен.После первого редактирования, когда вы возвращаетесь из обработки действия, поток останавливается, и поэтому во второй раз происходит сбой, потому что вы пытаетесь перезапустить остановленный поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...