2017-03-27 35 views
0

enter image description hereButterknife @genarate不工作{錯誤:(23,6)錯誤:無法找到符號類綁定}

build.grable(根)應用

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' 
} 

enter image description here

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 lib
  • 右鍵單擊所需佈局參考(例如, R.layout.main),然後生成並生成ButterKnife注入
  • 您需要選擇注入,您還可以選擇爲 適配器創建ViewHolder。
  • 點擊確認,並在您的代碼中無需工作即可享受注射!
  • 「確認」它不工作着注入任何代碼

Error:Execution failed for task':app1:compileReleaseJavaWithJavac'.Compilation failed;see the compiler error output for details.'

+0

你可以發佈你的應用程序級'build.gradle'嗎? –

+0

顯示你的build.gradle,都是 – miljon

+0

你缺少'annotationProcessor'com.jakewharton:butterknife-compiler:8.5.1''在你的gradle中 – Tim

回答

1

添加下面的gradle中的條目文件

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

@BindView是用來綁定視圖的關鍵。

+0

「buildscript { allprojects { 存儲庫{ mavenLocal() mavenCentral() maven {url「https:// jitpack。IO」} }} 依賴 { 類路徑 'com.android.tools.build:gradle:2.3.0' //注意:不要將您的應用程序依賴關係在這裏,他們屬於 //在個人模塊的build.gradle文件 } } allprojects { 庫{ jcenter() } }」 –

0

爲了證實了以上的評論中提到Tim,則需要以下內容添加到您的build.gradledependencies部分:

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

雖然啓用了ButterKnife庫,但Java編譯器無法處理@Bind註釋,因爲ButterKnife註釋處理器沒有已啓用。此批註處理器將ButterKnife專用語句擴展爲Android可以本機理解的格式。

另外,還要確保你有jcenter和mavenCentral庫在build.gradle啓用:

repositories { 
    mavenCentral() 
    jcenter() 
} 

編輯我是個白癡。感謝Sourav Ganguly指出需要使用@BindView,而不是@Bind。我已經花了太多的時間在最近匕首...

編輯2:關於你提到的常量表達式的錯誤,你還需要包括你的R文件:

import com.pocketfeeds.app1.R 
+0

錯誤:執行任務':app1:compileReleaseJavaWithJavac'失敗。 >編譯失敗;詳細信息請參閱編譯器錯誤輸出。 –

+0

您是否可以編輯原始文章以包含錯誤日誌?該錯誤信息本身並不是很有用 –

+0

在生成butterknife時,沒有發生錯誤和相同問題的更改 –

0

轉到Android Studio->文件 - >設置 - >插件 - >瀏覽存儲庫 - >搜索butterknife - >安裝。

然後重新啓動你的android studio。

它適用於我