2014-04-15 45 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 ...