java – 无法重用方法android OOP
发布时间:2020-12-15 08:49:06 所属栏目:Java 来源:网络整理
导读:在我的应用程序中,我无法重用我在ArabicUtility类中声明的方法.我的意图是使用阿拉伯语类来安排阿拉伯语文本.因此,我想要的是将字符串传递给我在Arabicutility类中声明的方法并进行转换. 我认为这基本上是我对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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |