2

我是 Android 开发的新手。我的项目中有两个 Java 文件。一个文件包含我的主要活动,因此我想将数据从一个 Java 文件传输到另一个包含主要活动的文件。

cordovaExample.java:

package org.apache.cordova.example;

import android.content.Context;
import android.content.Intent;
import android.telephony.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

import org.apache.cordova.*;
public class cordovaExample extends DroidGap
{
@Override
 public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    super.loadUrl("file:///android_asset/www/index.html");

    Bundle extras = getIntent().getExtras();
    String phno = extras.getString("novel.PhoneNumber");
   Toast.makeText(getApplicationContext(),phno,Toast.LENGTH_LONG).show();



}
}

小说.java

package org.apache.cordova.example;

import android.content.Context;
import android.content.Intent;
import android.telephony.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class novel extends Activity
{ 
public String PhoneNumber;
Context mcontext;
public String getNumber()
{



 TelephonyManager tMgr=(TelephonyManager)mcontext.getSystemService(Context.TELEPHONY_SERVICE); 

         Intent intent = new Intent(this, cordovaExample.class);
            intent.putExtra("novel.PhoneNumber", PhoneNumber);
                startActivity(intent);
               return PhoneNumber = tMgr.getLine1Number();
        }

}

所以我想将"PhoneNumber"from转移novel.javacordovaExample.javabut in novel.java,运行应用程序后我进入"unfortunately app has stopped"模拟器。

这是日志猫

08-12 15:49:37.657: E/AndroidRuntime(779): FATAL EXCEPTION: main
08-12 15:49:37.657: E/AndroidRuntime(779): java.lang.RuntimeException: Unable to start activity  ComponentInfo{org.apache.cordova.example/org.apache.cordova.example.cordovaExample}: java.lang.NullPointerException
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.os.Looper.loop(Looper.java:137)
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.app.ActivityThread.main(ActivityThread.java:4424)
08-12 15:49:37.657: E/AndroidRuntime(779):  at java.lang.reflect.Method.invokeNative(Native Method)
08-12 15:49:37.657: E/AndroidRuntime(779):  at java.lang.reflect.Method.invoke(Method.java:511)
08-12 15:49:37.657: E/AndroidRuntime(779):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-12 15:49:37.657: E/AndroidRuntime(779):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-12 15:49:37.657: E/AndroidRuntime(779):  at dalvik.system.NativeStart.main(Native Method)
08-12 15:49:37.657: E/AndroidRuntime(779): Caused by: java.lang.NullPointerException
08-12 15:49:37.657: E/AndroidRuntime(779):  at org.apache.cordova.example.cordovaExample.onCreate(cordovaExample.java:20)
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.app.Activity.performCreate(Activity.java:4465)
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-12 15:49:37.657: E/AndroidRuntime(779):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
08-12 15:49:37.657: E/AndroidRuntime(779):  ... 11 more

另外,如果我尝试这个简单的程序,我会得到相同的结果:

cordovaExample.java

package org.apache.cordova.example;

import android.content.Context;
import android.content.Intent;
import android.telephony.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

import org.apache.cordova.*;
public class cordovaExample extends DroidGap
{
@Override
 public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    super.loadUrl("file:///android_asset/www/index.html");

   novel c=new novel()
   int a=c.getNumber();
   Toast.makeText(getApplicationContext(),a,Toast.LENGTH_LONG).show();



}
}

小说.java

package org.apache.cordova.example;

import android.content.Context;
import android.content.Intent;
import android.telephony.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class novel extends Activity
{ 
public int a=0;
public int getNumber()
{

    a=5;

 return a;
        }

}

我该如何解决这个问题?

4

3 回答 3

1

您在返回块后使用意图语句

返回电话号码 = tMgr.getLine1Number();

意图 myIntent = new Intent(novel.this, cordovaExample.class);

返回块后,任何代码都显示无法访问的错误。

传递意图参数后,您可以调用return。

   TelephonyManager tMgr=(TelephonyManager)mcontext.getSystemService(Context.TELEPHONY_SERVICE); 

   Intent intent = new Intent(this, cordovaExample.class);
   intent.putExtra("novel.PhoneNumber", PhoneNumber);
   startActivity(intent);
   return PhoneNumber = tMgr.getLine1Number();
于 2012-08-12T09:33:45.947 回答
0

Android API 指南包含有关如何在单个应用程序内的活动/服务之间传递数据的权威常见问题解答项目。

试试这个,

在小说中这样做设置电话号码

Intent myIntent = new Intent(novel.this, cordovaExample.class);
myIntent.putExtra("phone", 989898989);
startActivity(myIntent);

在 cordovaExample 文件中执行以下操作以获取 phoneNumber

Bundle b = this.getIntent().getExtras();
String i = b.getString("phone");

如果您无法传递数据,那么另一种方法是声明公共方法并传递它们,请参见以下示例,

小说.java

private static String phoneNumber = "";

public void onCreate()
{
    ...
    phoneNumber = "9898989898";
    ...
}

public static String getPhoneNumber()
{
      return phoneNumber;
}

cordovaExample.java

private static String phoneNumber = ""; 

phoneNumber = novel.getPhoneNumber();
于 2012-08-12T09:27:52.113 回答
0

将您的代码更改为:您获得了 NPE,cordovaExample.java因为novel您将nullPhoneNumber 放入 Extra。

     TelephonyManager tMgr=(TelephonyManager)mcontext.getSystemService(Context.TELEPHONY_SERVICE); 

             Intent intent = new Intent(this, cordovaExample.class);
             PhoneNumber = tMgr.getLine1Number(); // Check PhoneNumber  not null here before send to cordovaExample
if (PhoneNumber !=null ){
                intent.putExtra("novel.PhoneNumber", PhoneNumber);
                    startActivity(intent);}

            }
于 2012-08-12T12:34:04.677 回答