1

我是 android 的菜鸟,我在调用另一个类的方法时遇到问题。从它自己的类中调用该方法时工作正常,但是当我从另一个类中调用它时,我得到一个空指针异常。任何帮助将不胜感激。这是我的代码;

从class2调用class1中的方法:

BottlesActivity  inst = new BottlesActivity();
inst.call0();               

第 1 类中的方法:

public void call0() {
    try {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:1234567890"/*+phonenumber0*/));
        startActivity(callIntent); //<--This line causes nullpointerexception
    } catch (ActivityNotFoundException activityException) {
        Log.e("dialing-example", "Call failed", activityException);
    }
}

这是我的 Logcat

09-06 20:51:33.237: E/AndroidRuntime(18192): java.lang.NullPointerException
09-06 20:51:33.237: E/AndroidRuntime(18192):    at android.app.Activity.startActivityForResult(Activity.java:2893)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at android.app.Activity.startActivity(Activity.java:3003)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at com.bryanjrichardson.GSCC.BottlesActivity.call0(GoldandSilverCoinCalculatorActivity.java:857)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at com.bryanjrichardson.GSCC.SimpleItemizedOverlay$1.onClick(SimpleItemizedOverlay.java:204)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:174)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at android.os.Looper.loop(Looper.java:130)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at android.app.ActivityThread.main(ActivityThread.java:3859)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at java.lang.reflect.Method.invokeNative(Native Method)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at java.lang.reflect.Method.invoke(Method.java:507)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-06 20:51:33.237: E/AndroidRuntime(18192):    at dalvik.system.NativeStart.main(Native Method)
4

3 回答 3

1

如果您的 2 个类是2 个独立的活动,您的情况将导致空指针异常,因为当第二个活动运行时,第一个活动停止(终止)-> 这是 Android 操作系统机制,您无法更改。

针对您的情况的解决方案:

  • (1) Activity 1 是其他的父级,这种情况适用于 Application 类或 TabHost(复杂)。

  • (2)创建像@Zapl's answer这样的静态方法;但它仍然不是很好,因为这个静态方法应该是常用的,而不是在 Class 1 -> modify: Create a common Class,如下所示:

这是实用程序类:

public class GlobalUtil
{
    public static void startUrlActivity(Context context, String url) {
    try {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse(url));
        context.startActivity(callIntent); //<-- pass current activity or context
        } catch (ActivityNotFoundException activityException) {
        Log.e("dialing-example", "Call failed", activityException);
        }
    }
}

在任何其他活动类中,您可以调用它:

GlobalUtil.startUrlActivity(this, "tel:1234567890"/*+phonenumber0*/");

或者

GlobalUtil.startUrlActivity(getBaseContext().getApplicationContext(), "your_url");
于 2012-09-07T01:43:26.487 回答
0

如果 call0() 是同一活动类的方法,这将起作用。

public void call0() {
    try {
        Intent callIntent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:1234567890"));
        startActivity(callIntent); 
    } catch (ActivityNotFoundException activityException) {
        Log.e("dialing-example", "Call failed", activityException);
    }
}

并且不要忘记在清单文件中添加它:

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>

我不认为这是一件好事:

BottlesActivity  inst = new BottlesActivity();
inst.call0();

相反,当单击按钮时,调用 call0() 如下所示:

public void onClick(View v) {
     switch(v.getId()){
          case R.id.idButton:
                call0();
                break;

      }
}
于 2012-09-07T01:13:14.697 回答
-1

你不能创造一个Activity你自己。static您可以在另一个 Activity 类中使​​用方法。

从任何活动:

BottlesActivity.call0(this);

瓶装活动

public static void call0(Context context) {
    try {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:1234567890"/*+phonenumber0*/));
        context.startActivity(callIntent); //<--This line causes nullpointerexception
    } catch (ActivityNotFoundException activityException) {
        Log.e("dialing-example", "Call failed", activityException);
    }
}
于 2012-09-07T01:23:17.147 回答