【问题标题】:Butterknife @generate not working{Error:(23, 6) error: cannot find symbol class Bind}Butterknife @generate not working{Error:(23, 6) error: 找不到符号类绑定}
【发布时间】:2017-03-27 16:48:50
【问题描述】:

build.grable(root)app

apply plugin: 'com.android.library'

android {
compileSdkVersion 25
buildToolsVersion '25.0.0'
defaultConfig {
    minSdkVersion 18
    targetSdkVersion 23
    multiDexEnabled true
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner    "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'),          'proguard-rules.pro'
    }
}
productFlavors {
}
dexOptions {
    incremental true
    javaMaxHeapSize '2g'
    jumboMode = true
    preDexLibraries =true
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.3.0'
compile 'com.android.support:design:25.3.0'
compile 'com.jakewharton:butterknife:8.5.1'
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:support-v4:25.3.0'
compile 'com.android.support:support-annotations:25.3.0'
androidTestCompile 'com.android.support:support-annotations:25.3.0'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
}

build.gradle

package com.pocketfeeds.app1;

import android.app.ProgressDialog;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import butterknife.ButterKnife;
import butterknife.Bind;

public class LoginActivity extends AppCompatActivity {
private static final String TAG = "LoginActivity";
private static final int REQUEST_SIGNUP = 0;

@Bind(R.id.input_email) EditText _emailText;
@Bind(R.id.input_password) EditText _passwordText;
@Bind(R.id.btn_login) Button _loginButton;
@Bind(R.id.link_signup) TextView _signupLink;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    ButterKnife.bind(this);

    _loginButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            login();
        }
    });

   _signupLink.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // Start the Signup activity
            Intent intent = new Intent(getApplicationContext(),         SignupActivity.class);
            startActivityForResult(intent, REQUEST_SIGNUP);
            finish();
            overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
        }
    });
}

public void login() {
    Log.d(TAG, "Login");

    if (!validate()) {
        onLoginFailed();
        return;
    }

    _loginButton.setEnabled(false);

    final ProgressDialog progressDialog = new ProgressDialog(LoginActivity.this,
            R.style.AppTheme_Dark_Dialog);
    progressDialog.setIndeterminate(true);
    progressDialog.setMessage("Authenticating...");
    progressDialog.show();

    String email = _emailText.getText().toString();
    String password = _passwordText.getText().toString();

    // TODO: Implement your own authentication logic here.

    new android.os.Handler().postDelayed(
            new Runnable() {
                public void run() {
                    // On complete call either onLoginSuccess or onLoginFailed
                    onLoginSuccess();
                    // onLoginFailed();
                    progressDialog.dismiss();
                }
            }, 3000);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SIGNUP) {
        if (resultCode == RESULT_OK) {

            // TODO: Implement successful signup logic here
            // By default we just finish the Activity and log them in automatically
            this.finish();
        }
    }
}

@Override
public void onBackPressed() {
    // Disable going back to the MainActivity
    moveTaskToBack(true);
}

public void onLoginSuccess() {
    _loginButton.setEnabled(true);
    finish();
}

public void onLoginFailed() {
    Toast.makeText(getBaseContext(), "Login failed", Toast.LENGTH_LONG).show();

    _loginButton.setEnabled(true);
}

public boolean validate() {
    boolean valid = true;

    String email = _emailText.getText().toString();
    String password = _passwordText.getText().toString();

    if (email.isEmpty() || !android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
        _emailText.setError("enter a valid email address");
        valid = false;
    } else {
        _emailText.setError(null);
    }

    if (password.isEmpty() || password.length() < 4 || password.length() > 10) {
        _passwordText.setError("between 4 and 10 alphanumeric characters");
        valid = false;
    } else {
        _passwordText.setError(null);
    }

    return valid;
}
}
  • 确保您的类路径中有最新的 Butterknife 库
  • 右键单击所需布局参考的用法(例如 Activity 或 Fragment 中的 R.layout.main),然后生成并生成 ButterKnife Injections
  • 选择您想要的注入,您还可以选择创建 ViewHolder 适配器。
  • 点击确认,享受代码中的注入,无需任何工作!
  • “确认”它不起作用不能注入任何代码

错误:task':app1:compileReleaseJavaWithJavac'的执行失败。编译失败;有关详细信息,请参阅编译器错误输出。'

【问题讨论】:

  • 你能发布你的应用级build.gradle吗?
  • 显示你的 build.gradle,两者都
  • 你的 gradle 中缺少 annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
  • 还是一样(没有变化)
  • com.intellij.diagnostic.MessagePool$TooManyErrorsException:IDE 致命错误太多。监控停止。-->点击“确认”时出现新错误

标签: java android android-gradle-plugin jetbrains-ide


【解决方案1】:

在 gradle 文件中添加以下条目

compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'

@BindView 是用于绑定视图的键。

【讨论】:

  • "buildscript { allprojects { repositories { mavenLocal() mavenCentral() maven { url "jitpack.io" } } } 依赖项 { classpath 'com.android.tools.build:gradle:2.3.0' // 注意:不要将您的应用程序依赖项放在此处;它们属于 // 在单个模块 build.gradle 文件中 } } allprojects { repositories { jcenter() } }"
【解决方案2】:

要确认上面 cmets 中提到的 Tim,您需要将以下内容添加到您的 build.gradledependencies 部分:

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

当您启用了 ButterKnife 库时,Java 编译器无法处理 @Bind 注释,因为尚未启用 ButterKnife 注释处理器。这个注解处理器将 ButterKnife 特有的语句扩展为 Android 可以原生理解的格式。

还要确保您在 build.gradle 中启用了 jcenter 和 mavenCentral 存储库:

repositories {
    mavenCentral()
    jcenter()
}

编辑我是个白痴。感谢Sourav Ganguly 指出需要使用@BindView,而不是@Bind。我最近在 Dagger 上花了太多时间......

编辑 2:关于您的常量表达式错误,您还需要包含您的 R 文件:

import com.pocketfeeds.app1.R

【讨论】:

  • 错误:任务 ':app1:compileReleaseJavaWithJavac' 执行失败。 > 编译失败;有关详细信息,请参阅编译器错误输出。
  • 您可以编辑原始帖子以包含错误日志吗?该错误消息本身并不是很有帮助
  • 生成butterknife时错误和同样的问题没有变化
  • @Bind 下的下划线还在吗?使用 Build -&gt; Make Project 并在此处发布 full 构建输出,即错误消息之前发生的情况。
  • Gradle 同步失败:提供的字符串模块表示法“ReleaseJavaWithJavac”无效。示例符号:'org.gradle:gradle-core:2.2'、'org.mockito:mockito-core:1.9.5:javadoc'。有关更多详细信息,请参阅 IDE 日志(帮助 | 显示日志)
【解决方案3】:

转到Android Studio->文件->设置->插件->浏览存储库->搜索butterknife->安装。

然后重启你的安卓工作室。

对我有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2020-05-19
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多