从另一个类调用方法时崩溃

时间:2014-11-27 19:52:55

标签: android methods helper

为了减少不同活动之间的冗余代码,我正在尝试使用共享方法定义一个帮助器类,并在我需要时调用它,例如,我在这里阅读Calling methods from other classes in Android。仍然无法使其发挥作用。这段代码出了什么问题?

helper.class(我为操作栏设置了自定义视图并定义了向上意图)

public class helper extends Activity {


public void loadActionBar(ActionBar ab, int icon, int t) { 
    ab.setCustomView(R.layout.custom_actionbar); 
    View v = ab.getCustomView();         

    TextView title = (TextView)v.findViewById(R.id.ab_title); 
    title.setText(getText(t)); 

    ImageView logo = (ImageView)v.findViewById(R.id.ab_logo);
    logo.setImageResource(icon);

    logo.setOnClickListener( new View.OnClickListener() {
                                 @Override
                                 public void onClick(View v) {
                                     Intent i = getParentActivityIntent();
                                     startActivity(i); }
                             }
    );

    ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_HOME);
    ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
    ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
}
}

a1.class(我的活动)

public class a1 extends helper { 

private helper helper = new helper();

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

    helper.loadActionBar(getActionBar(), R.drawable.action_back, R.string.title_a1);
}
}

我正在传递所有相关代码。方法loadActionBar用于在类a1中扩展Activity时工作。 这是我得到的:

11-27 20:19:59.662    7618-7618/com.tinix.prova1 E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tinix.prova1/com.tinix.prova1.a1}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)
        at android.app.ActivityThread.access$700(ActivityThread.java:157)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:5317)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at android.content.ContextWrapper.getResources(ContextWrapper.java:89)
        at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
        at android.content.Context.getText(Context.java:323)
        at com.tinix.prova1.helper.loadActionBar(helper.java:21)
        at com.tinix.prova1.a1.onCreate(a1.java:43)
        at android.app.Activity.performCreate(Activity.java:5326)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2218)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2309)
            at android.app.ActivityThread.access$700(ActivityThread.java:157)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1289)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:176)
            at android.app.ActivityThread.main(ActivityThread.java:5317)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:0)

因为你的例外是:

  

无法开始活动   ComponentInfo {com.tinix.prova1 / com.tinix.prova1.a1}:   显示java.lang.NullPointerException

请确保您的布局内有:R.layout.custom_actionbar 标识为TextView

ab_title
<TextView
        android:id="@+id/ab_title"

title在这里为空:

title.setText(getText(t)); 

答案 1 :(得分:0)

我终于解决了自己的问题。

通过不在主活动中显式调用Helper类 - 无论是private Helper helper = new Helper();还是调用Helper中存储的方法,都可以正常工作。

例如,在我的onCreate中,我只需拨打loadActionBar - 而不是Helper.loadActionBar。 现在看起来很明显,因为我的活动实际上是extends Helper类。

尽管如此,我不知道为什么我在title.setText(getText(t));上检测到空问题。我看不出与此有任何关系。 如果有人能提供答案,这对其他用户来说会更有用。在接受这个答案之前我会等一段时间。