tzimhs panousis
tzimhs panousis

Reputation: 67

how to show progressbar for additional 20sec in android?

I have an activity (LoginActivity) that calls a java class (JsonTaskPost). I want to show a progessbar when the user clicks the button and the java class meanwhile does its task. I guess that the code must run too fast for the progressbar to be seen. So how can i add visibility of progressbar for e.g 20 sec? Or is the logic wrong?

LoginActivity.java

package com.example.mymobileforumbrowser2;

import android.app.ProgressDialog;
import android.content.Intent;
import android.icu.util.TimeUnit;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import static com.example.mymobileforumbrowser2.MainActivity.LOGIN_ACTIVITY;
import static com.example.mymobileforumbrowser2.MainActivity.mSharedEditor;
import static com.example.mymobileforumbrowser2.MainActivity.makeToast;
import static com.example.mymobileforumbrowser2.MainActivity.serverUrl;

public class LoginActivity extends AppCompatActivity {

    public static TextView serverMessageTxv;
    EditText usernameEditTxv,passwordEditTxv;
    Button loginButton;
    ProgressDialog progress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        serverMessageTxv = (TextView)findViewById(R.id.server_message);
        usernameEditTxv = (EditText)findViewById(R.id.username_edittextview);
        passwordEditTxv = (EditText)findViewById(R.id.password_edittextview);

        loginButton = (Button)findViewById(R.id.login_button);

        loginButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v) {

                progress = ProgressDialog.show(LoginActivity.this, "LOG IN",
                        "Logging Please Wait ...", true);

                new Thread(new Runnable() { // open new thread gia background processing
                    @Override
                    public void run() {
                        String url = serverUrl + "login.php";
                        //Log.d("EXEC_JSON","CALL JSON");
                        new JsonTaskPost().execute(url,
                                usernameEditTxv.getText().toString(),
                                passwordEditTxv.getText().toString(),
                                LOGIN_ACTIVITY);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                progress.dismiss();
                            }
                        });
                    }
                }).start();
                /*
                String url = serverUrl + "login.php";
                new JsonTaskPost().execute(url,
                        usernameEditTxv.getText().toString(),
                        passwordEditTxv.getText().toString(),
                        LOGIN_ACTIVITY);
                        */
            }
        });

    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);

        MenuItem topicItem = menu.findItem(R.id.new_topic);
        topicItem.setVisible(false);
        MenuItem postItem = menu.findItem(R.id.new_post);
        postItem.setVisible(false);
        //MenuItem mapItem = menu.findItem(R.id.map);
        //mapItem.setVisible(false);
        MenuItem loginItem = menu.findItem(R.id.login);
        loginItem.setVisible(false);
        invalidateOptionsMenu();

        return true;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        Intent intent;
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.preferences:
                intent = new Intent(this, PreferencesActivity.class);
                startActivity(intent);
                return true;
            case R.id.logout:
                if(mSharedEditor!= null)
                {
                    mSharedEditor.putString("Username", "");
                    mSharedEditor.putBoolean("LoggedIn", false);
                    mSharedEditor.commit();
                    makeToast(this, "Successfully logged out");
                }
                return true;
            case R.id.register:
                intent = new Intent(this, RegisterActivity.class);
                startActivity(intent);
                finish();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

}

JsonTaskPost.java

package com.example.mymobileforumbrowser2;

import android.os.AsyncTask;
import android.util.Log;

import org.json.JSONObject;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import  static com.example.mymobileforumbrowser2.LoginActivity.serverMessageTxv;
import  static com.example.mymobileforumbrowser2.MainActivity.LOGIN_ACTIVITY;
//import  static com.example.mymobileforumbrowser2.MainActivity.MAPS_ACTIVITY;
import  static com.example.mymobileforumbrowser2.MainActivity.NEWPOST_ACTIVITY;
import  static com.example.mymobileforumbrowser2.MainActivity.NEWTOPIC_ACTIVITY;
import  static com.example.mymobileforumbrowser2.MainActivity.POSTS_ACTIVITY;
import  static com.example.mymobileforumbrowser2.MainActivity.REGISTER_ACTIVITY;
import  static com.example.mymobileforumbrowser2.MainActivity.TOPICS_ACTIVITY;
import  static com.example.mymobileforumbrowser2.MainActivity.mSharedEditor;
import  static com.example.mymobileforumbrowser2.MainActivity.mSharedPrefs;
import  static com.example.mymobileforumbrowser2.MainActivity.removeHtmlChars;
import  static com.example.mymobileforumbrowser2.MainActivity.stringToListView;
import  static com.example.mymobileforumbrowser2.PostsActivity.adapterPosts;
import  static com.example.mymobileforumbrowser2.PostsActivity.postsListItems;
import  static com.example.mymobileforumbrowser2.RegisterActivity.registerServerMessageTxv;
import  static com.example.mymobileforumbrowser2.TopicsActivity.adapterTopics;
import  static com.example.mymobileforumbrowser2.TopicsActivity.topicsListItems;

//post-get class
// fetches topics / posts an ginetai call apo TopicsActivity / PostsActivity
public class JsonTaskPost extends AsyncTask<String, String, String>
{
    String message = null;
    String usernameSharedPrefs;
    String callingActivity;
    JSONObject jsonObject;

    protected void onPreExecute() {
        super.onPreExecute();

    }

    protected String doInBackground(String... params) {


        HttpURLConnection connection = null;
        BufferedReader reader = null;
        OutputStream outStream = null;
        callingActivity = params[3]; // orizetai apo caller
        Log.d("Calling Activity",callingActivity);
        usernameSharedPrefs = params[1]; //string of username if login called, else forum / topic name depending on caller activity
        Log.d("USERNAME",usernameSharedPrefs);

        try {
            URL url = new URL(params[0]); // callers url adress, eg http:localhost/phpbb/fetch_forums.php
            Log.d("CALLERS URL",params[0]);
            jsonObject = new JSONObject();
            message = paramsTojson(params).toString(); // metatrepei periexomena Json array se string , {"key:","value"}
            Log.d("MESSAGE",message);

            connection = (HttpURLConnection) url.openConnection(); //open connection to phpbb database
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setFixedLengthStreamingMode(message.getBytes().length);
            connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");

            outStream = new BufferedOutputStream(connection.getOutputStream());
            outStream.write(message.getBytes());
            outStream.close();

            InputStream stream = connection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(stream));

            StringBuffer buffer = new StringBuffer();
            String line;

            while ((line = reader.readLine()) != null) {
                buffer.append(line+"\n");
                Log.d("Response: ", "> " + line);
            }
            return buffer.toString();


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally
        {
            if (connection != null){
                connection.disconnect();
            }
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result)
    {
        if(result!=null)
        {
            if(callingActivity.equals(TOPICS_ACTIVITY))
            {
                stringToListView(result,topicsListItems);
                adapterTopics.notifyDataSetChanged(); // prosarmogh periexomenwn listview toy topics activity sta nea periexomena
            }
            else if(callingActivity.equals(POSTS_ACTIVITY))
            {
                stringToListView(result,postsListItems);
                adapterPosts.notifyDataSetChanged();
            }
            else if(callingActivity.equals(REGISTER_ACTIVITY))
            {
                result = removeHtmlChars(result);
                if(result.contains("You are registered"))
                    registerServerMessageTxv.setText(result);
            }
            else if(callingActivity.equals(LOGIN_ACTIVITY))
            {
                result = removeHtmlChars(result);
                serverMessageTxv.setText(result);
                mSharedEditor = mSharedPrefs.edit();
                if (result.contains("You are logged in"))
                {
                    mSharedEditor.putString("Username",usernameSharedPrefs);
                    mSharedEditor.putBoolean("LoggedIn",true);
                    mSharedEditor.commit();
                }
                else // LOGOUT / no user logged in
                {
                    mSharedEditor.putString("Username","");
                    mSharedEditor.putBoolean("LoggedIn",false);
                    mSharedEditor.commit();
                }
            }

        }
        super.onPostExecute(result);
    }
    protected JSONObject paramsTojson(String... params)
    {
        try
        {
            if (params[3].equals(LOGIN_ACTIVITY)) {
                jsonObject.put("username", params[1]);
                jsonObject.put("password", params[2]);
            } else if (params[3].equals(TOPICS_ACTIVITY)) {
                jsonObject.put("forum_name", params[1]);
                jsonObject.put("number_of_topics", params[2]);
            } else if (params[3].equals(POSTS_ACTIVITY)) {
                jsonObject.put("topic_name", params[1]);
                jsonObject.put("number_of_posts", params[2]);
            } else if (params[3].equals(REGISTER_ACTIVITY)) {
                jsonObject.put("username", params[1]);
                jsonObject.put("password", params[2]);
                jsonObject.put("email", params[4]);
            } else if (params[3].equals(NEWTOPIC_ACTIVITY)) {
                jsonObject.put("forum_name", params[1]);
                jsonObject.put("topic_title", params[2]);
                jsonObject.put("username", params[4]);
            } else if (params[3].equals(NEWPOST_ACTIVITY)) {
                jsonObject.put("topic_name", params[1]);
                jsonObject.put("forum_name", params[4]);
                jsonObject.put("username", params[5]);
                jsonObject.put("post_text", params[2]);
            }
            /*
            else if (params[3].equals(MAPS_ACTIVITY)) {
                jsonObject.put("username", params[1]);
                jsonObject.put("timestamp", params[2]);
                jsonObject.put("longitude", params[4]);
                jsonObject.put("latitude", params[5]);
            }
            */
        }
        catch (org.json.JSONException e)
        {
            e.printStackTrace();
        }
        return jsonObject;
    }

}

Upvotes: 1

Views: 496

Answers (3)

patilmandar2007
patilmandar2007

Reputation: 322

Your code is wrong that's why it is happening. You are calling progress.dismiss(); just after calling your AsyncTask. This is why the progressbar gets dismissed before the task has been completed.

You are already using JsonTaskPost(AsyncTask), so there is no need to use a separate thread here. And you need to call progress.dismiss(); from onPostExecute of JsonTaskPost as this method is where task completion happens. So for this either you can create call back for task completion or pass the progressBar instance to JsonTaskPost or directly use AsyncTask in the activity itself.

Upvotes: 2

Orvenito
Orvenito

Reputation: 437

you do not need to add 20 seconds for you to see the progress bar, what you need is to do an asyntask to show progressbar in the UI and in do some background tasks. In your case, you can do it like this:

class BackGround extends AsyncTask<String, Void, Boolean> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(myActivity.this);

            pDialog.show();

        }

        @Override
        public Boolean doInBackground(String... urls) {
           //Do something...
            return null;
        }

        public void onPostExecute(Boolean result) {
            pDialog.cancel();

        }
    }

you do not need to create another java class to do an asynctask you can do it inside your login activity and just call it like this:

new BackGround().execute();

Upvotes: 1

Muhammad Ashraf
Muhammad Ashraf

Reputation: 1282

When you dismiss the progress dialog create a handler and use the method postDelayed, it allows you to delay the code for a specific time like this:

runOnUiThread(new Runnable() {
     @Override
     public void run() {
          Handler handler = new Handler();
          handler.postDelayed(new Runnable() {
              @Override
              public void run() {
                  progress.dismiss();
              }
          }, 20000);
     }
});

20000 is your time in milliseconds which means 20 seconds

However I think you need to dismiss your dialog inside the onPostExecute method in your task

Upvotes: 1

Related Questions