2016-09-01 6 views
1

Es ist mein erstes Mal mit einem Fortschrittsbalken, ich habe eine HTTP-Anfrage gemacht. Ich möchte, dass ein unbestimmter Fortschrittsbalken angezeigt wird, wenn der Benutzer auf die Anmeldeschaltfläche klickt und dann verschwindet, wenn die Antwort empfangen wird. Unten ist was ich schon habe, aber der Fortschrittsbalken wird nicht angezeigt.Wie bekomme ich Fortschrittsbalken um anzuzeigen

unten ist die login.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/myCoordinatorLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center_horizontal" 
    android:orientation="vertical" 
    tools:context=".app.LoginActivity"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolBar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/colorPrimary"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:contentDescription="logo" 
      android:src="@drawable/bar" /> 

    </android.support.v7.widget.Toolbar> 


    <ScrollView 
     android:id="@+id/login_form" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:id="@+id/icons_container" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:paddingBottom="@dimen/activity_vertical_margin" 
      android:paddingLeft="@dimen/activity_horizontal_margin" 
      android:paddingRight="@dimen/activity_horizontal_margin" 
      android:paddingTop="40dp"> 
      <!-- Login progress --> 
      <ProgressBar 
       android:id="@+id/login_progress" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:indeterminate="true" 
       android:visibility="invisible" /> 

      <EditText 
       android:id="@+id/email" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="Email here" 
       android:maxLines="1" 
       android:singleLine="true" /> 


      <EditText 
       android:id="@+id/password" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="Password" 
       android:imeActionId="@+id/login" 
       android:imeActionLabel="Password here" 
       android:imeOptions="actionUnspecified" 
       android:inputType="textPassword" 
       android:maxLines="1" 
       android:singleLine="true" /> 

      <Button 
       android:id="@+id/email_sign_in_button" 
       style="?android:textAppearanceSmall" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginTop="16dp" 
       android:text="Login" 
       android:textStyle="bold" /> 

     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 
</android.support.design.widget.CoordinatorLayout> 

unter dem Login-Aktivität

public class loginActivity extends AppCompatActivity { 
    public final static String EXTRA_MESSAGE = "solutions.orbs.com.myapplication.app"; 
    EditText email, password; 
    Button login; 
    String emailCred, passwordCred; 
    ProgressBar progressBar; 

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

     email = (EditText) findViewById(R.id.email); 
     password = (EditText) findViewById(R.id.password); 
     progressBar = (ProgressBar) findViewById(R.id.login_progress); 

     ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); 

     NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
     final boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting(); 

     login = (Button) findViewById(R.id.email_sign_in_button); 


     login.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       progressBar.setVisibility(ProgressBar.VISIBLE); 

       emailCred = email.getText().toString(); 
       passwordCred = password.getText().toString(); 

       if (emailCred.isEmpty()) { 
        email.setError("Enter your Email"); 
       } else if (passwordCred.isEmpty()) { 
        password.setError("Enter your Password"); 
       } else if (!isConnected) { 
        Snackbar.make(findViewById(R.id.myCoordinatorLayout), "Sorry,Please connect to a network", Snackbar.LENGTH_SHORT).show(); 
       } else { 
        makeRequest(emailCred, passwordCred); 
       } 
      } 
     }); 
    } 

    public void makeRequest(final String user, final String cred) { 
     //the url we are posting the request to 
     String url = "http://mobile.map.education/api/login"; 


     //the post request function 
     StringRequest postRequest = new StringRequest(Request.Method.POST, url, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         progressBar.setVisibility(ProgressBar.INVISIBLE); 
         try { 
          //the json object represents the response we are expecting and status is the status of the request 
          //which will either be a success or an error and will be sent to us from the server 
          JSONObject jsonResponse = new JSONObject(response); 
          String status = jsonResponse.getString("status"); 

          //handler for if the response is an error 
          if (status.equalsIgnoreCase("error")) { 
           progressBar.setVisibility(ProgressBar.INVISIBLE); 
           //display and error message to the user using the snackbar notifier 
           Snackbar.make(findViewById(R.id.myCoordinatorLayout), jsonResponse.getString("message"), Snackbar.LENGTH_LONG).show(); 
          } 
          //handler for is the login is successful 
          else if (status.equalsIgnoreCase("success")) { 
           //this is the token granted to us by the server 
           String token = jsonResponse.getString("token"); 

           progressBar.setVisibility(ProgressBar.INVISIBLE); 

           //this starts an intent that sends us to the dashboard page of the application 
           Intent loader = new Intent(loginActivity.this, MainActivity.class); 
           loader.putExtra(EXTRA_MESSAGE, token); 
           startActivity(loader); 
          } 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }, 
       //this handles any errors the volley package gets 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         error.printStackTrace(); 
        } 
       } 
     ) { 
      //this is a method to set the parameters we are sending to be in the proper format 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<>(); 

       //the proper format of the login parameters is portal[parameter name goes here] 
       params.put("portal[username]", user); 
       params.put("portal[password]", cred); 
       params.put("portal[From]", "web"); 
       return params; 
      } 
     }; 

     //this is a retry policy that has been set to deal with timeout errors 
     postRequest.setRetryPolicy(new DefaultRetryPolicy(
       10000, 
       DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

     Volley.newRequestQueue(getApplicationContext()).add(postRequest); 

    } 
} 

Antwort

3

Versuchen Sie, diese ist. Erstellen Sie eine benutzerdefinierte Dialogklasse, die alle über die Anwendung wiederverwendet werden können

public class CShowProgress { 
     public static CShowProgress cShowProgress; 
     public static Context mContext; 
     public Dialog mDialog; 

     public CShowProgress(Context m_Context) { 
      this.mContext = m_Context; 
     } 

     public static CShowProgress getInstance() { 
      if (cShowProgress == null) { 
       cShowProgress = new CShowProgress(mContext); 
      } 
      return cShowProgress; 
     } 

     public void showProgress(Context m_Context) { 
      mDialog = new Dialog(m_Context); 
      mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      mDialog.setContentView(R.layout.custom_progress_layout);      
      mDialog.findViewById(R.id.progress_bar).setVisibility(View.VISIBLE); 
      mDialog.setCancelable(true); 
      mDialog.setCanceledOnTouchOutside(true); 
      mDialog.show(); 
     } 

     public void hideProgress() { 
      if (mDialog != null) { 
       mDialog.dismiss(); 
       mDialog = null; 
      } 
     } 
    } 

entsprechenden XML-custom_progress_layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:background="@android:color/transparent" 
     android:orientation="vertical"> 

     <ProgressBar 
      android:id="@+id/progress_bar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:indeterminate="true"/> 
    </RelativeLayout> 

und die Aktivität

CShowProgress cShowProgress = CShowProgress.getInstance(); 
    cShowProgress.showProgress(Activity.this); 

und ausblenden, indem Aufruf

cShowProgress.hideProgress(); 

Hoffe, das wird helfen.

1

Versuchen android:indeterminateOnly="true" propery in progressBar

1

Zuerst eine progress_layout_dialog.xml Datei in /res/layout/ dir

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       style="@style/dialog_style"> 

    <ProgressBar 
      android:id="@+id/progressView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:indeterminate="true" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true"/> 

    <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 

      android:text="@string/loading" 
      android:textSize="@dimen/sp_17" 
      android:textColor="@color/black_light" 
      android:textScaleX=".9" 

      android:layout_centerVertical="true" 
      android:layout_toRightOf="@+id/progressView" 
      android:padding="@dimen/dp_10" 
      android:layout_margin="@dimen/element_padding_8"/> 

</RelativeLayout> 

erstellen müssen dann zur Darstellung des Fortschritts Layout einen neuen Dialog erstellen.


ProgressDialog.java

public final class ProgressDialog { 

    protected TextView progressMessage; 
    private Dialog dialog; 

    public ProgressDialog(Context context, boolean cancelable, String progressText) { 
     dialog = UiUtils.generateNewDialog(context, R.layout.progress_layout_dialog); 
     dialog.setCancelable(cancelable); 
     progressMessage = (TextView) dialog.findViewById(R.id.title); 
     progressMessage.setText(progressText); 
    } 


    public void show() { 
     try { 
      this.dialog.show(); 
     } catch (Exception error) { 
      error.printStackTrace(); 
     } 
    } 


    public void close() { 
     this.dialog.dismiss(); 
    } 

    public Dialog getDialog() { 
     return this.dialog; 
    } 

    public TextView getProgressMessageView() { 
     return this.progressMessage; 
    } 

    public void setProgressMessage(String message) { 
     progressMessage.setText(message); 
    } 
} 

UiUtils.java

public class UiUtils { 

     public static void fillParent(Dialog dialog) { 
      WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
      params.width = WindowManager.LayoutParams.MATCH_PARENT; 
      dialog.getWindow().setAttributes(params); 
     } 

     public static Dialog generateNewDialog(Context activity_context, int layout) { 
      final Dialog dialog = new Dialog(activity_context); 
      dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

      dialog.setContentView(layout); 
      fillParent(dialog); 
      return dialog; 
     } 
} 

Verwenden der ProgressDialog als

Verwandte Themen