【发布时间】:2014-01-11 14:43:23
【问题描述】:
我认为下面的问题会很愚蠢(我只是编码的初学者)但我已经坐了很长时间,最后决定提出来。我在类级别有一个 getName() 方法,它可以访问 string.xml 文件并从那里获取一个条目。
代码:
public String getName()
{
String name = null;
try {
System.out.println("Inside getName");
String app_id = MainActivity.this.getResources().getString(R.string.app_id);
System.out.println(app_id);
fb = new Facebook(app_id);
System.out.println("Before the JSON");
String jsonUser = fb.request("me");
System.out.println("Successful in fb.request");
obj=Util.parseJson(jsonUser);
System.out.println("Successful in parsejson");
name = obj.optString("username");
} catch...
}
当我调用上述方法时,它会在
处返回 NullPointerException String app_id = getString(R.string.app_id);
有趣和最好的部分是我在 onCreate() 方法中有相同的行,如下所示:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.name_text_view);
b = (ImageView) findViewById(R.id.postbutton);
snap = (ImageView) findViewById(R.id.camera_image_view);
sp = getPreferences(MODE_PRIVATE);
**String app_id = getString(R.string.app_id);**
fb = new Facebook(app_id);
System.out.println("The app_id is " + app_id);
String access_token = sp.getString("access_token", null);
long expires = sp.getLong("access_expires", 0);
}
这不会引发任何空指针异常。我的问题是为什么它在方法 getName() 单独抛出 NullPointerException 。它与 R 的范围有关吗?我在这里完全迷失了,发布这样的问题真的很尴尬,但也无法接受它给我这个愚蠢的错误的事实。任何帮助都将受到疯狂的赞赏!!!!
更新:
Logcat:
12-26 17:24:07.330: W/dalvikvm(23184): threadid=1: thread exiting with uncaught exception (group=0x4118d438)
12-26 17:24:07.330: E/AndroidRuntime(23184): FATAL EXCEPTION: main
12-26 17:24:07.330: E/AndroidRuntime(23184): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.facebook_integration/com.example.facebook_integration.SQLiteDemoActivity}: java.lang.NullPointerException
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2099)
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.app.ActivityThread.access$600(ActivityThread.java:138)
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.os.Looper.loop(Looper.java:137)
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.app.ActivityThread.main(ActivityThread.java:4954)
12-26 17:24:07.330: E/AndroidRuntime(23184): at java.lang.reflect.Method.invokeNative(Native Method)
12-26 17:24:07.330: E/AndroidRuntime(23184): at java.lang.reflect.Method.invoke(Method.java:511)
12-26 17:24:07.330: E/AndroidRuntime(23184): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
12-26 17:24:07.330: E/AndroidRuntime(23184): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
12-26 17:24:07.330: E/AndroidRuntime(23184): at dalvik.system.NativeStart.main(Native Method)
12-26 17:24:07.330: E/AndroidRuntime(23184): Caused by: java.lang.NullPointerException
12-26 17:24:07.330: E/AndroidRuntime(23184): at com.example.facebook_integration.SQLiteDemoActivity.onCreate(SQLiteDemoActivity.java:33)
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.app.Activity.performCreate(Activity.java:5252)
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
12-26 17:24:07.330: E/AndroidRuntime(23184): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2038)
12-26 17:24:07.330: E/AndroidRuntime(23184): ... 11 more
更新 2:
Strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Facebook_Integration</string>
<string name="action_settings">Settings</string>
<string name="app_id">594458613962731</string>
<string name="hello_world">Hello world!</string>
<string name="title_activity_snap__image_view">Snap_ImageView</string>
<string name="album_name">San_Pictures</string>
<string name="title_activity_android_custom_gallery">AndroidCustomGalleryActivity</string>
<string name="title_activity_full_screen">FullScreen</string>
<string name="title_activity_sqlite_demo">SQLiteDemoActivity</string>
</resources>
更新 3:
当我与 facebook 打交道时,我认为问题在于创建 Facebook 对象 (fb) 的实例,所以我评论了该行并再次尝试,但它仍然在
处显示 NullPointerExceptionString app_id = MainActivity.this.getResources().getString(R.string.app_id);
如果有人遇到过这样的情况,请告诉我。
更新 4:
MyApp 的结构:
以下是我的应用程序的要点
1.登录脸书。
2.拍照。
3.将用户名和拍摄图片的路径存入数据库。
最初,我的主要活动有 facebook 图像,它会将我登录到 facebook 并检索用户名,从而将其设置在同一主要活动的文本视图中。 其次是一个相机按钮,它将带我到相机并拍照。 拍照后,第三个活动应该显示用户名和存储图片的路径。(这是我无法再次获取用户名的地方)。
【问题讨论】:
-
只是为了确定,可以检查R.java是否在'public static final class string'下有“app_id”
-
在“public static final class String”里面!!感谢您的考虑。
-
您是从广播接收器还是服务调用 getName?
-
我没有使用任何广播接收器。我只是称它为 usig java 时尚。 Classvariable.methodname() 样式。
-
Sudhee 在下面的回答可能是正确的(虽然很难理解)。您在一个不完全构造的对象上调用“getName”。 getString 直到 onCreate 被调用后才会起作用。
标签: android nullpointerexception