Как показать индикатор выполнения на HTTP POST? - PullRequest
1 голос
/ 27 сентября 2011

Я пытаюсь загрузить видео на API, и мне было интересно, как вы показываете индикатор выполнения, а также отклоняете его после завершения загрузки?

public class Loadvid extends AsyncTask <Object,Integer,String>{
        EditText etxt_user = (EditText) findViewById(R.id.user_email);
        EditText etxt_pass = (EditText) findViewById(R.id.friend_email);

        protected void onPreExecute(){
            dialog = new ProgressDialog(share.this);
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setMax(100);
            dialog.show();
            super.onPreExecute();

        }

        @Override
        protected String doInBackground(Object... params) {

            if(etxt_user.equals("")||etxt_pass.equals("")){
                dialog.dismiss();
                Alert.setMessage("Please fill in the Blanks");
                Alert.show();

            }
else{
        Pattern keys= Pattern.compile("[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
                        "\\@" +
                        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +
                        "(" +
                        "\\." +
                        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +
                        ")+");
            Matcher matcher = keys.matcher((CharSequence) etxt_user);
            Matcher matcher1 = keys.matcher((CharSequence) etxt_pass);
            if(!matcher.matches()|| !matcher1.matches())
{
                    dialog.dismiss();
                    Alert.setMessage("Wrong email address.");
                    Alert.show();

                }
            }

            //implement the httppost.
        try
            {

 MultipartEntity me = new MultipartEntity();

 me.addPart("file", new FileBody(new File("/")));

 httppost.setEntity(me);

 HttpResponse responsePOST = client.execute(httppost);  
 HttpEntity resEntity = responsePOST.getEntity(); 

 InputStream inputstream = resEntity.getContent();
 BufferedReader buffered = new BufferedReader(new InputStreamReader(inputstream));
 StringBuilder stringbuilder = new StringBuilder();
 String currentline = null; 

 while ((currentline = buffered.readLine()) != null)
    { 
     stringbuilder.append(currentline + "\n"); 
     String result = stringbuilder.toString(); 
     Log.v("HTTP UPLOAD REQUEST",result); 
     inputstream.close();}  
}

     catch (Exception e) {
     e.printStackTrace();

    }


            return null;
        }


        protected void onPostExecute(String result){

            super.onPostExecute(result);

            if(result==null){
                dialog.dismiss();
                Alert.setMessage("The result failed");
                Alert.show();
                return;
            }
            else
            {

                Intent intent = new Intent("com...");
                startActivity(intent);
            }
        }


    }

Но это не работает.Когда я нажимаю на кнопку, чтобы отправить, он показывает обработчик в течение 2 секунд, а затем вызывает ошибку закрытия.

Журнал ошибок говорит мне, что мои ошибки вызваны на

Matcher matcher = keys.matcher((CharSequence) etxt_user);

@ "сделать в фоновом режиме"

и где-нибудь в моем onPrexecute.

Что я делаю не так, помогите, пожалуйста!

1 Ответ

3 голосов
/ 27 сентября 2011

Просто используйте AsyncTask. Это было сделано специально для таких задач: выполнение долговременного кода в фоновом режиме и правильное обновление пользовательского интерфейса (в потоке пользовательского интерфейса).

...