2013-10-04 3 views
1

startActivity가 호출 될 때 계속 NPE를 얻었고 인 텐트에 제공하는 컨텍스트와 관련이 있다고 생각합니다. 인터넷에서 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 활동 : 당신이 SbplXmlData가 활동하고 싶다면

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

당신의 새로운 객체를 인스턴스화하여 시작할 수 없습니다 : 여기

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); 

     } 
    } 

는 로그 캣입니다 그것. 인 텐트를 사용해야합니다.

SbplXmlData를 개체가 아니라 Activity로 설정 하시겠습니까?이

는 그냥 AsyncTask를에게 SbplSplash에 서브 클래스를 만들고, loadPage() 상기 활동의 멤버 함수 :

편집 (즉, "이 활동을 확장"건너 뛰기).

+0

이 (가) 게시되었습니다. 이 외에도'SbplXmlData' 클래스에는'getGameId' 함수도 없습니다. –

+0

게시물을 짧게 만드는 관련성이없는 기능을 제거했습니다. – jbrew

+0

고마워요. 이 제안은 효과가있었습니다. 방금 SbplXmlData에 대한 Activity를 제거한 다음 SbplXmlData 객체에 SbplSplash 컨텍스트를 전달했습니다. – jbrew

관련 문제