2011-09-15 5 views
0

Application 클래스를 통해 ArrayList을 전달하려고하는데 이러한 목록을 채울 때 목록이 초기화 되더라도 nullpointerexception이 발생합니다.안드로이드 ArrayList의 응용 프로그램 클래스

public class appCyberesa extends Application{ 

    private ArrayList<Marchand> HProviders ;//= new ArrayList<Marchand>(); 
    private ArrayList<CarAgency> CProviders ;//= new ArrayList<CarAgency>(); 
    private ArrayList<Agency> Agencies ;//= new ArrayList<Agency>(); 
    public GeoPoint Tunisie = new GeoPoint(microdegrees(36.80023),microdegrees(10.186073)); 
    private GeoPoint myLoc; 

    @Override 
    public void onCreate() { 



    } 

    private static int microdegrees(double value){ 
     return (int)(value*1000000); 
    } 

    public void setMyLoc(GeoPoint myLoc) { 
     this.myLoc = myLoc; 
    } 

    public GeoPoint getMyLoc() { 
     return myLoc; 
    } 

    public void setHProviders(ArrayList<Marchand> hProviders) { 
     HProviders = new ArrayList<Marchand>(); 
     HProviders.addAll(hProviders); 
    } 

    public ArrayList<Marchand> getHProviders() { 
     return HProviders; 
    } 

    public void setCProviders(ArrayList<CarAgency> cProviders) { 
     CProviders = new ArrayList<CarAgency>(); 
     CProviders.addAll(cProviders); 
    } 

    public ArrayList<CarAgency> getCProviders() { 
     return CProviders; 
    } 

    public void setAgencies(ArrayList<Agency> agencies) { 
     Agencies = new ArrayList<Agency>(); 
     Agencies.addAll(agencies); 
    } 

    public ArrayList<Agency> getAgencies() { 
     return Agencies; 
    } 
} 

하고 다음 NullPointerException이 원인이되는 : 내 응용 프로그램 클래스입니다

09-15 13:59:19.284: ERROR/AndroidRuntime(761): java.lang.RuntimeException: An error occured while executing doInBackground() 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at java.lang.Thread.run(Thread.java:1096) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761): Caused by: java.lang.NullPointerException 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at com.cyberesa.info.Splash$ProgressTask.doInBackground(Splash.java:70) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at com.cyberesa.info.Splash$ProgressTask.doInBackground(Splash.java:1) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
09-15 13:59:19.284: ERROR/AndroidRuntime(761):  ... 4 more 

과 맞추 (Splash.java:70) 인 : 여기

appCyberesa myApp = ((appCyberesa)this.getApplication()); 
... 
//the error occurs here 
myApp.setHProviders(Marchands); 
myApp.setCProviders(CarRenters); 
myApp.setAgencies(Agencies); 

하면 스택 트레이스입니다 : myApp.setHProviders(Marchands);

@Peter : Hole splash.java :

package com.cyberesa.info; 


import java.util.ArrayList; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 

public class Splash extends Activity { 
    ArrayList<Marchand>Marchands = new ArrayList<Marchand>(); 
    ArrayList<CarAgency> CarRenters = new ArrayList<CarAgency>(); 
    ArrayList<Agency> Agencies = new ArrayList<Agency>(); 
    appCyberesa myApp = ((appCyberesa)this.getApplication()); 
    MyProgressDialog dialog; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.splashscreen); 

     dialog = MyProgressDialog.show(this, null, null); 
     new ProgressTask(Splash.this).execute(); 
    } 

    private class ProgressTask extends AsyncTask<String, String, Boolean> { 
     //private Splash activity; 


     public ProgressTask(Splash splash) { 
      //this.activity = splash; 
      //context = splash; 
     } 

     /** application context. */ 
     //private Context context; 

     protected void onPreExecute() { 

     } 

     protected void onCancelled(){ 

     } 

     @Override 
     protected void onPostExecute(final Boolean success) { 
      dialog.dismiss(); 
      Intent newIntent = new Intent(Splash.this, Main.class); 
      Splash.this.startActivity(newIntent); 
     } 


     protected void onProgressUpdate(String... msg) { 

     } 

     protected Boolean doInBackground(final String... args) { 
      Log.v("Splash","Loading Hotels providers"); 
      HComparatorParser HParser = new HComparatorParser(); 
      Marchands=HParser.parse("t"); 
      Log.v("Splash","Loading Car providers"); 
      CComparatorParser CParser = new CComparatorParser(); 
      CarRenters = CParser.parse(0); 
      Log.v("Splash","Travel Agencies"); 
      AgencyParser AParser=new AgencyParser(); 
      Agencies=AParser.parse(); 
      appCyberesa.setHProviders(Marchands); 
      appCyberesa.setCProviders(CarRenters); 
      appCyberesa.setAgencies(Agencies); 

      return true; 
     } 
    } 
} 
+0

'NullPointerException'은 소스에서 발생한 행을 사용자에게 알려줍니다. NPE가 어떤 라인에서 발생했는지 정확하게 알려주십시오. –

+0

그것은 여기에서 일어났습니다 :'myApp.setHProviders (Marchands);' – Houssem

답변

0

왜 빈 목록을 만들고 항목을 다시 추가해야합니까? 또한 hProviders은 ??을 설정할 때 null입니까?

public void setHProviders(ArrayList<Marchand> hProviders) { 
     HProviders = hProviders; 
} 
+0

미안 Teja, 똑같은 예외 : ( – Houssem

+0

전체 스택 추적을 게시 할 수 있습니까? 문제를 격리하는 데 도움이 될 수 있습니다 .. –

0

이 줄은 NullPointerException 생산 : 당신이

myApp.setHProviders(Marchands); 

Marchand가 null, 또는 더 나은되지 않았는지 확인 호출 할 때 null입니다

HProviders.addAll(hProviders); 

Marchand 때문에, 테이야 Kantamneni의 조언을 따르십시오.

+0

'Log.v "0, valueOf (Marchands.size())); '그리고 그것은 48을 주었으므로 null이 아닌 것 같아요 . – Houssem

+0

다른 선택은'myApp'가 null이라는 것입니다. 디버거로 쉽게 확인할 수 있습니다. –

+0

여기 있습니다. myApp 선언 : 'appCyberesa myApp = ((appCyberesa) this.getApplication());'null이 아니며 null이 될 수 없습니다! – Houssem

0

myApp의 변수를 onCreate()으로 초기화해야합니다. 인스턴스가 생성 될 때 현재이 같은이 변수를 초기화하는 :

appCyberesa myApp = ((appCyberesa)this.getApplication()); 

문제 필요한 기본 프레임 워크 'hasn 때문에 Splash의 인스턴스가 작성 될 때, getApplication()에 대한 호출이 null를 반환 할 것입니다 아직 설정되지 않았습니다 (이 모든 것은 onCreate()가 호출되기 전에 생성자에서 발생합니다). 그냥 초기화를 onCreate()으로 옮기면 좋을 것입니다.

관련 문제