Android崩溃在空的EText上

问题描述 投票:1回答:2

只要编辑文本为空,应用程序就会一直崩溃。当我输入电子邮件时,它工作正常。我不知道我做错了什么,我已经尝试过更改高度值,当它是空的时手动检查但仍然存在问题。任何人都可以告诉我代码是否有问题。

错误:

        --------- beginning of crash
09-07 10:39:53.791 15985-15985/com.app.androidnewsapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.app.androidnewsapp, PID: 15985
    android.view.InflateException: Binary XML file line #17: Binary XML file line #17: Error inflating class TextView
        at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at android.widget.Editor.showError(Editor.java:430)
        at android.widget.Editor.setError(Editor.java:466)
        at android.widget.TextView.setError(TextView.java:4960)
        at android.widget.TextView.setError(TextView.java:4945)
        at com.app.androidnewsapp.activities.ActivityForgotPassword.onValidationFailed(ActivityForgotPassword.java:132)
        at com.app.androidnewsapp.utils.validation.Validator$1.onPostExecute(Validator.java:195)
        at com.app.androidnewsapp.utils.validation.Validator$1.onPostExecute(Validator.java:183)
        at android.os.AsyncTask.finish(AsyncTask.java:651)
        at android.os.AsyncTask.access$500(AsyncTask.java:180)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:168)
        at android.app.ActivityThread.main(ActivityThread.java:5885)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
     Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class TextView
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
        at android.widget.Editor.showError(Editor.java:430) 
        at android.widget.Editor.setError(Editor.java:466) 
        at android.widget.TextView.setError(TextView.java:4960) 
        at android.widget.TextView.setError(TextView.java:4945) 
        at com.app.androidnewsapp.activities.ActivityForgotPassword.onValidationFailed(ActivityForgotPassword.java:132) 
        at com.app.androidnewsapp.utils.validation.Validator$1.onPostExecute(Validator.java:195) 
        at com.app.androidnewsapp.utils.validation.Validator$1.onPostExecute(Validator.java:183) 
        at android.os.AsyncTask.finish(AsyncTask.java:651) 
        at android.os.AsyncTask.access$500(AsyncTask.java:180) 
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:168) 
        at android.app.ActivityThread.main(ActivityThread.java:5885) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687) 
     Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 24: TypedValue{t=0x3/d=0x4a3 "res/color/secondary_text_material_light.xml" a=1 r=0x106011a}
        at android.content.res.TypedArray.getColor(TypedArray.java:447)
        at android.widget.TextView.<init>(TextView.java:753)

码:

@Required(order = 1)
@Email(order = 2, message = "Please Check and Enter a valid Email Address")
EditText edtEmail;

String strEmail, strMessage;
private Validator validator;
Button btn_forgot;
ProgressBar progressBar;
LinearLayout layout;

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

    if (Config.ENABLE_RTL_MODE) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);
        }
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.BLACK);
    }

    edtEmail = findViewById(R.id.etUserName);
    btn_forgot = findViewById(R.id.btnForgot);
    progressBar = findViewById(R.id.progressBar);
    layout = findViewById(R.id.view);

    btn_forgot.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            validator.validateAsync();
        }
    });

    validator = new Validator(this);
    validator.setValidationListener(this);
    setupToolbar();

}

public void setupToolbar() {
    final Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    final ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        getSupportActionBar().setHomeButtonEnabled(false);
        getSupportActionBar().setTitle("");
    }

    AppBarLayout appBarLayout = findViewById(R.id.appBarLayout);
    if (appBarLayout.getLayoutParams() != null) {
        CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
        AppBarLayout.Behavior appBarLayoutBehaviour = new AppBarLayout.Behavior();
        appBarLayoutBehaviour.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
            @Override
            public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
                return false;
            }
        });
        layoutParams.setBehavior(appBarLayoutBehaviour);
    }
}

@Override
public void onValidationSucceeded() {
    strEmail = edtEmail.getText().toString();
    if (NetworkCheck.isNetworkAvailable(ActivityForgotPassword.this)) {
        new MyTaskForgot().execute(Constant.FORGET_PASSWORD_URL + strEmail);
    } else {
        Toast.makeText(getApplicationContext(), getResources().getString(R.string.msg_no_network), Toast.LENGTH_SHORT).show();
    }
}

@Override
public void onValidationFailed(View failedView, Rule<?> failedRule) {
    String message = failedRule.getFailureMessage();
    if (failedView instanceof EditText) {
        failedView.requestFocus();
        ((EditText) failedView).setError(message);
    } else {
        Toast.makeText(this, "Record Not Saved", Toast.LENGTH_SHORT).show();
    }
}
@Override
public void onBackPressed() {
    //Log.d(TAG, "onBackPressed: Si entra +++++++++");
    // moveTaskToBack(true);
    startActivity(new Intent(getApplicationContext(), ActivityUserLogin.class));
    finish();
}
private class MyTaskForgot extends AsyncTask<String, Void, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressBar.setVisibility(View.VISIBLE);
        layout.setVisibility(View.INVISIBLE);
    }

    @Override
    protected String doInBackground(String... params) {
        return NetworkCheck.getJSONString(params[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        if (null == result || result.length() == 0) {
            Toast.makeText(getApplicationContext(), getResources().getString(R.string.msg_no_network), Toast.LENGTH_SHORT).show();

        } else {

            try {
                JSONObject mainJson = new JSONObject(result);
                JSONArray jsonArray = mainJson.getJSONArray(Constant.CATEGORY_ARRAY_NAME);
                JSONObject objJson = null;
                for (int i = 0; i < jsonArray.length(); i++) {
                    objJson = jsonArray.getJSONObject(i);
                    strMessage = objJson.getString(Constant.MSG);
                    Constant.GET_SUCCESS_MSG = objJson.getInt(Constant.SUCCESS);
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    progressBar.setVisibility(View.GONE);
                    setResult();
                }
            }, Constant.DELAY_PROGRESS_DIALOG);
        }

    }
}

public void setResult() {

    if (Constant.GET_SUCCESS_MSG == 0) {
        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setTitle(R.string.whops);
        dialog.setMessage(R.string.forgot_failed_message);
        dialog.setPositiveButton(R.string.dialog_ok, null);
        dialog.setCancelable(false);
        dialog.show();

        layout.setVisibility(View.VISIBLE);
        edtEmail.setText("");
        edtEmail.requestFocus();

    } else {

        AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setTitle(R.string.dialog_success);
        dialog.setMessage(R.string.forgot_success_message);
        dialog.setPositiveButton(R.string.dialog_ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Intent intent = new Intent(ActivityForgotPassword.this, ActivityUserLogin.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                finish();
            }
        });
        dialog.setCancelable(false);
        dialog.show();

    }

}

@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
    switch (menuItem.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            break;
        default:
            return super.onOptionsItemSelected(menuItem);
    }
    return true;
}

XML:

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusableInTouchMode="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingToolbarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            android:background="@color/colorBlackary"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"
            app:titleEnabled="false">


            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="5dp"
                android:padding="10dp"
                android:text="@string/title_forgot_password"
                android:textColor="@color/colorRed"
                android:textSize="15sp" />


            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_collapseMode="pin"
                app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:foreground="?android:attr/selectableItemBackground"
        app:behavior_overlapTop="64dp"
        app:cardCornerRadius="3dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        card_view:cardElevation="6sp"
        card_view:cardPreventCornerOverlap="false"
        card_view:cardUseCompatPadding="true">


        <RelativeLayout
            android:id="@+id/lyt_form"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true">


            <ImageView
                android:layout_width="match_parent"
                android:layout_height="470dp"
                android:scaleType="fitXY"
                android:src="@drawable/fondopeleadorkary" />

            <LinearLayout
                android:id="@+id/view"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:orientation="vertical"
                android:padding="20dp">



                <android.support.design.widget.TextInputLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:theme="@style/TextLabel">


                    <EditText
                        android:id="@+id/etUserName"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="10dp"
                        android:layout_marginTop="20dp"
                        android:drawablePadding="15dp"
                        android:hint="@string/edt_email"
                        android:textColor="@color/colorWhite"
                        android:inputType="textEmailAddress" />

                </android.support.design.widget.TextInputLayout>


                <TextView
                    android:id="@+id/textView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:gravity="center"
                    android:textColor="@color/colorWhite"
                    android:text="@string/forgot_message" />

                <com.balysv.materialripple.MaterialRippleLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="10dp"
                    android:layout_marginTop="20dp"
                    app:mrl_rippleAlpha="0.2"
                    app:mrl_rippleColor="@color/colorRipple"
                    app:mrl_rippleHover="true"
                    app:mrl_rippleOverlay="true">

                    <Button
                        android:id="@+id/btnForgot"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:background="@color/colorRed"
                        android:text="@string/btn_send"
                        android:textColor="@color/colorWhite"
                        android:textStyle="bold" />

                </com.balysv.materialripple.MaterialRippleLayout>

            </LinearLayout>

            <ProgressBar
                android:id="@+id/progressBar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:visibility="gone" />

        </RelativeLayout>

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

</android.support.design.widget.CoordinatorLayout>
java android
2个回答
0
投票

试试这个

  @Override
 public void onValidationFailed(View failedView, Rule<?> failedRule) {
    String message = failedRule.getFailureMessage();
    if (failedView instanceof EditText) {
       failedView.requestFocus();
         if(!TextUtils.isEmpty(message){
        ((EditText) failedView).setError(message);
        }

     } else {
        Toast.makeText(this, "Record Not Saved", Toast.LENGTH_SHORT).show();
    }

-1
投票

我发现了问题:

android:theme="@style/TextLabel"

不得不首先创建一个主题而不是一个样式,并使用它:

    <style name="TextLabel" parent="BellicTheme">

感谢大家

© www.soinside.com 2019 - 2024. All rights reserved.