2013-10-04 87 views
1

当我调用startActivity的时候,我总是得到一个NPE,我认为它与我提供给Intent的上下文有关。我正尝试在我从互联网获取xml数据的同时使启动屏幕保持不变。启动活动创建一个启动AsyncTask的sbplXmlData对象。 onPostExecute()是什么调用startActivity()。谢谢你的帮助。Android startActivity()导致nullpointerexception

public class SbplSplash extends Activity { 
String now_playing, earned; 
ArrayList<String> gameIdsList; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash_layout); 

    /** 
    * Showing splashscreen while making network calls to download necessary 
    * data before launching the app Will use AsyncTask to make http call 
    */ 

    /* Invoke Xml Parser and database creator/population */ 
    gameIdsList = new ArrayList<String>(); 
    SbplXmlData xmlDataObj = new SbplXmlData(gameIdsList); 
    gameIdsList = xmlDataObj.getGameId(); 

} 


} 

的SbplXmlData活动:

public class SbplXmlData extends Activity { 

    SbplXmlData(ArrayList<String> gameIdsList) { 
      this.gameIdsList = gameIdsList; 
      loadPage(); 
    } 
     public Context getContext() { 
     return this; 
    } 
    // Uses AsyncTask to download the XML feed 
    public void loadPage() { 
      /* assume we have a connection for now */ 
     wifiConnected = true; 

     if ((wifiConnected || mobileConnected)) { 
      new DownloadXmlTask(this).execute(URL); 
     } else { 
      Log.e(TAG, "Unable to downlaod from URL"); 
      // show error 
     } 
    } 

    // Implementation of AsyncTask used to download XML feed from nfl.com. 
    private class DownloadXmlTask extends AsyncTask<String, Void, String> { 
     Context context; 
     DownloadXmlTask(Context context) { 
      this.context = context; 
     } 
     @Override 
     protected String doInBackground(String... urls) { 
      try { 
       return loadXmlFromNetwork(urls[0]); 
      } catch (IOException e) { 
       return getResources().getString(R.string.connection_error); 
      } catch (XmlPullParserException e) { 
       return getResources().getString(R.string.xml_error); 
      } 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      // do something to indicate success 
      super.onPostExecute(result); 

      // will close this activity and launch main activity 
      Intent i = new Intent(context, LiveViewActivity.class); 
      //i.putStringArrayListExtra("list", gameIdsList); 

      startActivity(i); 

     } 
    } 

这里是logcat的:

10-04 14:47:14.242: I/SbplXmlData(32559): 14 
10-04 14:47:14.242: D/OpenGLRenderer(32559): Enabling debug mode 0 
10-04 14:47:14.242: D/AndroidRuntime(32559): Shutting down VM 
10-04 14:47:14.242: W/dalvikvm(32559): threadid=1: thread exiting with uncaught exception (group=0x42021ac8) 
10-04 14:47:14.252: E/AndroidRuntime(32559): FATAL EXCEPTION: main 
10-04 14:47:14.252: E/AndroidRuntime(32559): java.lang.NullPointerException 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.app.Activity.startActivityForResult(Activity.java:3430) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.app.Activity.startActivityForResult(Activity.java:3391) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.app.Activity.startActivity(Activity.java:3626) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.app.Activity.startActivity(Activity.java:3594) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at com.jbrewsapps.sbpl.SbplXmlData$DownloadXmlTask.onPostExecute(SbplXmlData.java:103) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at com.jbrewsapps.sbpl.SbplXmlData$DownloadXmlTask.onPostExecute(SbplXmlData.java:1) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.os.AsyncTask.finish(AsyncTask.java:631) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.os.Handler.dispatchMessage(Handler.java:99) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.os.Looper.loop(Looper.java:137) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at android.app.ActivityThread.main(ActivityThread.java:5328) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at java.lang.reflect.Method.invokeNative(Native Method) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at java.lang.reflect.Method.invoke(Method.java:511) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
10-04 14:47:14.252: E/AndroidRuntime(32559): at dalvik.system.NativeStart.main(Native Method) 
10-04 14:47:14.282: I/Process(32559): Sending signal. PID: 32559 SIG: 9 
+2

您能否发布异常的logcat? – fasteque

+0

你可以发布staktrace吗? – Emmanuel

+0

为什么你在这里使用Asynctask上下文。您可以使用当前活动上下文(即SbplXmlData.this)来启动活动。 – Ranjit

回答

4

如果你想在SbplXmlData是一个活动,你可以不被实例化的新对象启动它。你必须使用一个意图。

你确定你想SbplXmlData是一个活动,而不是一个对象? (即跳过“延伸活动”)

编辑:

只要使的AsyncTask子类来SbplSplash,和loadPage()的所述活动的成员函数。

+0

正确。除此之外,'SbplXmlData'类中也没有'getGameId'函数。 –

+0

我删除了相关的功能,使帖子更短 – jbrew

+0

谢谢。这个建议奏效了。我刚摆脱SbplXmlData的Activity,然后在SbplSplash上​​下文中传递给SbplXmlData对象。 – jbrew

相关问题