unbinder how example butter bindview java android android-studio android-fragments butterknife

java - example - how to use butterknife



Butterknife 8.4.0 no encuentra vistas despuĆ©s de volver a ejecutar la aplicaciĆ³n. Obtiene una NullPointerException (4)

Creo que te falta en el proyecto gradle algo como esto:

classpath ''com.android.tools.build:gradle:2.2.2''

Después de volver a ejecutar la aplicación en Android Studio Butterknife.bind(this) ya no encuentra las vistas. La única solución confiable que encontré hasta ahora es mediante la Cleaning/Rebuilding Project y volver a ejecutarla. Luego vuelve a encontrar las vistas hasta la próxima repetición. Esto es increíblemente molesto hasta ahora y toma un mínimo de dos minutos para una reconstrucción.

Tengo el siguiente build.gradle

android { compileSdkVersion 24 buildToolsVersion "25.0.0" defaultConfig { applicationId "xx" minSdkVersion 21 targetSdkVersion 24 versionCode x versionName "xxx" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" jackOptions { enabled true } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } } packagingOptions { exclude ''META-INF/NOTICE'' exclude ''META-INF/LICENSE'' } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { annotationProcessor ''com.jakewharton:butterknife-compiler:8.4.0'' compile ''com.jakewharton:butterknife:8.4.0'' androidTestCompile ''com.android.support.test.espresso:espresso-core:2.2.2'' androidTestCompile ''com.android.support.test:runner:0.5'' androidTestCompile ''com.android.support:support-annotations:24.2.1'' compile ''com.android.support:appcompat-v7:24.2.1'' compile ''com.android.support:design:24.2.1'' compile ''com.android.support:support-v13:24.2.1'' compile ''com.android.support:support-v4:24.2.1'' compile ''com.android.support.test.espresso:espresso-idling-resource:2.2.2'' }

También estoy usando las herramientas de compilación com.android.tools.build:gradle:2.2.2

Con Butterknife.setDebug(true) obtengo lo siguiente:

D/ButterKnife: Looking up binding for xx.LoginFragment D/ButterKnife: Not found. Trying superclass xx.BaseFragment D/ButterKnife: Not found. Trying superclass android.app.Fragment D/ButterKnife: MISS: Reached framework class. Abandoning search.

El BaseFragment realiza el enlace y LoginFragment extiende. Se parece a esto

BaseFragment import android.app.Fragment; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(getLayoutResourceId(), container, false); ButterKnife.setDebug(true); unbinder = ButterKnife.bind(this, v); initViews(v); return v; }

LoginFragment @BindView(R.id.inputEmail) protected EditText inputEmail; @Override protected void initViews(View v) { EditTextFocusListener focusListener = new EditTextFocusListener(); inputEmail.setOnFocusChangeListener(focusListener); }

Y el stacktrace

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ''void android.widget.EditText.setOnFocusChangeListener(android.view.View$OnFocusChangeListener)'' on a null object reference at xx.LoginFragment.initViews(LoginFragment.java:51) at xx.BaseFragment.onCreateView(BaseFragment.java:53)

Como dije antes, la única solución que es confiable en este momento es hacer una clean/rebuild de todo el proyecto. Esta estructura exacta funcionó bien antes de usar jackCompiler y no puedo deshabilitarla más. La mayor parte del código depende de ello.


Esta es una solución temporal hasta que alguien tenga una mejor respuesta o se publique en el canal estable.

Cambié al canal canario y actualicé Android Studio a 2.3 Canary y com.android.tools.build:gradle:2.3.0-alpha1 . Todo lo demás se mantiene igual que en el post de apertura.

EDITAR: En última instancia, decidí desactivar el jackCompiler y volver a Java 1.7. Es estable ahora.

jackOptions { enabled false }


La página github dice que use annotationProcessor pero la página jakewharton.github.io dice que use apt .

Basado en this publicación SO, parece que es un problema con las instrucciones frente a la versión del complemento Gradle de Android que se usa (aunque estoy usando la versión 2.2.2 y aún veo el problema).

Actualización para octubre de 2016: probablemente ya no necesite apt y el complemento android-apt. La versión 2.2 del complemento Gradle de Android tiene una configuración de procesador de anotaciones que debería utilizar en su lugar.

Pero deberías intentar esto

Trata de cambiar

annotationProcessor ''com.jakewharton:butterknife-compiler:8.4.0''

con

apt ''com.jakewharton:butterknife-compiler:8.4.0''


Ver here Por favor, incluya esto:

En Gradle :

compile ''com.jakewharton:butterknife:8.4.0''

annotationProcessor ''com.jakewharton:butterknife-compiler:8.4.0'' también.

Esto puede ayudarte.