我有一个应用程序,其中cookie存储在WebView中。当我想要获取Cookie时,Android 4.0+中的一切都很好,但在Android Gingerbread中我得到了NullPointerException。 我不知道如何解决这个问题,有人可以帮忙吗?
public String getCookie(String siteName,String CookieName){
String CookieValue = null;
CookieSyncManager.createInstance(this.activity);
CookieSyncManager.getInstance().startSync();
CookieManager cookieManager = CookieManager.getInstance();
String cookies = cookieManager.getCookie(siteName);
if(!cookies.equals(null)){
String[] temp=cookies.split("[;]");
for (String ar1 : temp ){
if(ar1.contains(CookieName)){
String[] temp1=ar1.split("[=]");
CookieValue = temp1[1];
}
}
}
return CookieValue;
}
这是LogCat,它指向if
- 短语:
01-26 17:59:22.789: E/AndroidRuntime(28108): FATAL EXCEPTION: main
01-26 17:59:22.789: E/AndroidRuntime(28108): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.grevius.hhgvertretungsplan/de.grevius.hhgvertretungsplan.MainActivity}: java.lang.NullPointerException
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.os.Handler.dispatchMessage(Handler.java:99)
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.os.Looper.loop(Looper.java:130)
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.app.ActivityThread.main(ActivityThread.java:3835)
01-26 17:59:22.789: E/AndroidRuntime(28108): at java.lang.reflect.Method.invokeNative(Native Method)
01-26 17:59:22.789: E/AndroidRuntime(28108): at java.lang.reflect.Method.invoke(Method.java:507)
01-26 17:59:22.789: E/AndroidRuntime(28108): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
01-26 17:59:22.789: E/AndroidRuntime(28108): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
01-26 17:59:22.789: E/AndroidRuntime(28108): at dalvik.system.NativeStart.main(Native Method)
01-26 17:59:22.789: E/AndroidRuntime(28108): Caused by: java.lang.NullPointerException
01-26 17:59:22.789: E/AndroidRuntime(28108): at de.grevius.hhgvertretungsplan.MainActivity.getCookie(MainActivity.java:592)
01-26 17:59:22.789: E/AndroidRuntime(28108): at de.grevius.hhgvertretungsplan.MainActivity.onStart(MainActivity.java:560)
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.app.Activity.performStart(Activity.java:3791)
01-26 17:59:22.789: E/AndroidRuntime(28108): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1731)
01-26 17:59:22.789: E/AndroidRuntime(28108): ... 11 more
编辑:有了Salmans代码,我收到了这条消息:
01-26 18:35:04.050: E/Main Activity(28872): Error occured while Extracting Cookie Value !, Error = java.lang.NullPointerException
01-26 18:35:04.050: W/System.err(28872): at de.grevius.hhgvertretungsplan.MainActivity.getCookie(MainActivity.java:633)
它指的是if(!cookies.equals("")&&((!(CookieName!=null))&&(!CookieName.isEmpty()))){
答案 0 :(得分:1)
我认为您传递的是主要活动对象的无效引用。
然而,坠机可能有很多原因。 (与无效的siteName / CookieName等一样)
以下是修改代码的方法,以便告诉您究竟发生了什么。
public String getCookie(String siteName,String CookieName){
String CookieValue = "";
String cookies = "";
try
{
CookieSyncManager.createInstance(MainActivity.this);
CookieSyncManager.getInstance().startSync();
CookieManager cookieManager = CookieManager.getInstance();
if(!siteName.isEmpty)
{
Log.d("Main Activity", "siteName = "+siteName);
cookies = cookieManager.getCookie(siteName);
}
else
{
Log.w("Main Activity", "siteName is empty");
}
}
catch(Exception e)
{
Log.e("Main Activity", "Error occured while getting Cookies !, Error = "+e.toString());
e.printStackTrace();
}
try
{
if((!cookies.equals(""))&&((!CookieName==null)&&(!CookieName.isEmpty()))){
String[] temp=cookies.split("[;]");
for (String ar1 : temp ){
if(ar1.contains(CookieName)){
String[] temp1=ar1.split("[=]");
CookieValue = temp1[1];
}
}
else {
Log.w("Main Activity", "cookies = "+cookies);
Log.w("Main Activity", "CookieName= "+CookieName);
}
}
catch(Exception e)
{
Log.e("Main Activity", "Error occured while Extracting Cookie Value !, Error = "+e.toString());
e.printStackTrace();
}
return CookieValue;
}
我希望这会有所帮助。