2014-04-15 48 views
6

我在做什麼 ::使用黃油刀庫視圖注射

  1. 我想爲我的簡單項目
  2. 我遵循了文檔中的所有步驟運行butter knife library,但我仍然很 獲取日誌錯誤
  3. 我怎樣才能解決這個問題,我失去了任何一步
  4. 我還添加了一罐libs文件夾

MainActivity.java

package com.example.butterknife; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
import butterknife.ButterKnife; 
import butterknife.InjectView; 

public class MainActivity extends Activity { 

    @InjectView(R.id.txtID) TextView title; 

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

     ButterKnife.inject(this); 
     title.setText("Hello Everyone !!"); 

    } 
} 

登錄 ::

04-15 11:50:57.845: E/AndroidRuntime(913): FATAL EXCEPTION: main 
04-15 11:50:57.845: E/AndroidRuntime(913): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.butterknife/com.example.butterknife.MainActivity}: java.lang.NullPointerException 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.os.Looper.loop(Looper.java:137) 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.app.ActivityThread.main(ActivityThread.java:4340) 
04-15 11:50:57.845: E/AndroidRuntime(913): at java.lang.reflect.Method.invokeNative(Native Method) 
04-15 11:50:57.845: E/AndroidRuntime(913): at java.lang.reflect.Method.invoke(Method.java:511) 
04-15 11:50:57.845: E/AndroidRuntime(913): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-15 11:50:57.845: E/AndroidRuntime(913): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-15 11:50:57.845: E/AndroidRuntime(913): at dalvik.system.NativeStart.main(Native Method) 
04-15 11:50:57.845: E/AndroidRuntime(913): Caused by: java.lang.NullPointerException 
04-15 11:50:57.845: E/AndroidRuntime(913): at com.example.butterknife.MainActivity.onCreate(MainActivity.java:19) 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.app.Activity.performCreate(Activity.java:4465) 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
04-15 11:50:57.845: E/AndroidRuntime(913): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
04-15 11:50:57.845: E/AndroidRuntime(913): ... 11 more 
04-15 11:51:06.722: I/Process(913): Sending signal. PID: 913 SIG: 9 
+0

看起來'title'爲空,它沒有被注入任何東西。 –

回答

13

按照此步驟[到Eclipse IDE]:

1)您的項目右擊在包資源管理器中。得到Java Compiler - >Annotation Processing並檢查Enable project specific settings

2)展開Annotation Processing部分並選擇Factory Path。檢查Enable project specific settings,然後單擊Add JARs導航到項目的庫/文件夾並選擇罐子。

3)點擊Ok保存新的設置。 Eclipse將要求您重建您應該點擊的項目Yes

注意:確保.apt_generated/文件夾位於您的項目根目錄中。它應該包含像YOURACTIVITY$$ViewInjector.java這樣的文件。如果這些文件不存在,則通過選定的項目→清理觸發清理生成。該文件夾和文件不應該被檢入到版本控制中。

參考 - >Set up manual configuration for ButterKnife annotations

+0

感謝您指點我的文檔...我也能夠解決[+1]! – Devrath

+0

@Casper愛來幫忙:) – nitesh

+0

註解處理選項不存在我的Eclipse安裝必須遵循這裏的工作http://stackoverflow.com/a/26028701/329034 – mbwasi

3

IntelliJ IDEA的 - 如果你的項目使用外部配置(如 的Maven pom.xml的),那麼註釋處理應該只是工作。

遵循以下步驟:

  1. 開放思想的偏好:File - >Other Settings - >Default Settings
  2. 導航到Compiler - >Annotation Processors然後檢查Enable annotation processing

參考 - >Set up manual configuration for ButterKnife annotations

更新30-6-2015

按照以下步驟Intellij IDEA 14.0:

  1. 開放思想的偏好:File - >Settings或單擊ctl + alt + s

  2. 導航到Build, Execution and deployment - >Compiler - >Annotation Processors並選擇您的項目然後檢查Enable annotation processing

+1

使用File - Settings而不是File - 默認設置,對於IntelliJ IDEA 14.1,設置對話框更深一層,因此它是構建,執行,部署 - 編譯器 - 註釋處理器。 – RenniePet

+0

它不再是一個選項。 –

+0

@IgorGanapolsky在我的答案更新中嘗試新步驟 –

0

@Bind替換@InjectView和@InjectViews。分別替換ButterKnife.inject和ButterKnife.reset。

看這個:@InjectView replaced ...