微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 无法重用方法android OOP

在我的应用程序中,我无法重用我在arabicUtility类中声明的方法.我的意图是使用阿拉伯语类来安排阿拉伯语文本.因此,我想要的是将字符串传递给我在arabicutility类中声明的方法并进行转换.

我认为这基本上是我对OOP知识的一些问题.所以帮我纠正这个.

这是我添加arabicutility类的方法

public void addTranslate(int rid, TextView txt1) {
        String textv = getResources().getString(rid);
        txt1.setText(arabicUtilities.reshapeSentence(textv));
    //  Typeface typeFace=Typeface.createFromAsset(getAssets(),"fonts/DroidNaskhBold.ttf");
    //  txt1.setTypeface(typeFace);

    }

我不能将此方法声明为静态,因为getResources()是非静态的.我必须从Activity扩展,因为我使用了android方法.原则上没有这样定义.

这就是我尝试在其他活动类中使用上述方法方法.

arbic.addTranslate(R.string.butt18title1, txt1);
arbic.addTranslate(R.string.butt18desc1, txt2);

但是当我运行程序时,它会在我进行上述活动时崩溃.

这是日志猫

12-29 10:02:32.561: E/AndroidRuntime(951): FATAL EXCEPTION: main
12-29 10:02:32.561: E/AndroidRuntime(951): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxx.xxx/com.xxxx.xxx.ShowMessageActivity}: java.lang.NullPointerException
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2059)
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.app.ActivityThread.access$600(ActivityThread.java:130)
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.os.Looper.loop(Looper.java:137)
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.app.ActivityThread.main(ActivityThread.java:4745)
12-29 10:02:32.561: E/AndroidRuntime(951):  at java.lang.reflect.Method.invokeNative(Native Method)
12-29 10:02:32.561: E/AndroidRuntime(951):  at java.lang.reflect.Method.invoke(Method.java:511)
12-29 10:02:32.561: E/AndroidRuntime(951):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-29 10:02:32.561: E/AndroidRuntime(951):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-29 10:02:32.561: E/AndroidRuntime(951):  at dalvik.system.NativeStart.main(Native Method)
12-29 10:02:32.561: E/AndroidRuntime(951): Caused by: java.lang.NullPointerException
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.content.Contextwrapper.getResources(Contextwrapper.java:81)
12-29 10:02:32.561: E/AndroidRuntime(951):  at com.xxxx.xxx.arabicUtilities.addTranslate(arabicUtilities.java:252)
12-29 10:02:32.561: E/AndroidRuntime(951):  at com.xxxx.xxx.ShowMessageActivity.onCreate(ShowMessageActivity.java:184)
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.app.Activity.performCreate(Activity.java:5008)
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
12-29 10:02:32.561: E/AndroidRuntime(951):  at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2023)
12-29 10:02:32.561: E/AndroidRuntime(951):  ... 11 more

解决方法:

无需将addTranslate声明为静态来获取非Activity类中的Resources,您只需要通过使用非活动类构造函数传递当前活动上下文或者在方法中传递:

public void addTranslate(int rid, TextView txt1,Context context) {
        String textv = context.getResources().getString(rid);
        txt1.setText(arabicUtilities.reshapeSentence(textv));

    }

现在,您可以从Activity类调用addTranslate:

arbic.addTranslate(R.string.butt18title1, txt1,Your_Current_Activity.this);
arbic.addTranslate(R.string.butt18desc1, txt2,Your_Current_Activity.this);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐