Class 应用程序类中的Android ArrayList
我试图在Class 应用程序类中的Android ArrayList,class,arraylist,android,Class,Arraylist,Android,我试图在应用程序类上传递ArrayLists,但在填充这些列表时,即使列表已初始化,我也会得到nullpointerexception。我的申请类别是: public class appCyberesa extends Application{ private ArrayList<Marchand> HProviders ;//= new ArrayList<Marchand>(); private ArrayList<CarAgency>
应用程序
类上传递ArrayList
s,但在填充这些列表时,即使列表已初始化,我也会得到nullpointerexception。我的申请类别是:
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;
}
}
这是stacktrace:
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
ligne(Splash.java:70)是: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;
}
}
}
package com.cyberesa.info;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.content.Intent;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
公共课堂活动{
ArrayListArchands=新的ArrayList();
ArrayList carrenents=新的ArrayList();
ArrayList代理=新的ArrayList();
appCyberesa myApp=((appCyberesa)this.getApplication());
MyProgressDialog;
/**在首次创建活动时调用*/
@凌驾
创建公共空间(捆绑冰柱){
超级冰柱;
setContentView(R.layout.splashscreen);
dialog=MyProgressDialog.show(this,null,null);
新建ProgressTask(Splash.this).execute();
}
私有类ProgressTask扩展了AsyncTask{
//私人喷溅活动;
公共进程任务(飞溅){
//这个活动=飞溅;
//上下文=飞溅;
}
/**应用程序上下文*/
//私人语境;
受保护的void onPreExecute(){
}
取消时受保护的空(){
}
@凌驾
受保护的void onPostExecute(最终布尔值成功){
dialog.dismise();
Intent newIntent=newIntent(Splash.this,Main.class);
Splash.this.startActivity(newIntent);
}
受保护的void onProgressUpdate(字符串…msg){
}
受保护的布尔doInBackground(最终字符串…args){
Log.v(“飞溅”,“装载酒店供应商”);
HComparatorParser HParser=新的HComparatorParser();
Marchands=HParser.parse(“t”);
Log.v(“飞溅”、“装载车辆供应商”);
CComparatorParser CParser=新的CComparatorParser();
carrenents=CParser.parse(0);
Log.v(“飞溅”、“旅行社”);
AgencyParser AParser=新的AgencyParser();
Agencies=AParser.parse();
应用程序设置提供程序(Marchands);
应用程序。设置提供程序(Carrents);
appCyberesa.setAgencies(Agencies);
返回true;
}
}
}
为什么需要创建空列表并再次添加项目??另外hProviders
设置时是否为空
public void setHProviders(ArrayList<Marchand> hProviders) {
HProviders = hProviders;
}
public void setHProviders(数组列表hProviders){
HPProviders=HPProviders;
}
此行生成NullPointerException
:
HProviders.addAll(hProviders);
因为调用时,Marchand
为null
myApp.setHProviders(Marchands);
确保Marchand
不为空,或者更好,遵循Teja Kantamneni的建议。您需要在onCreate()中初始化变量myApp
。创建实例时,您当前正在初始化此变量,如下所示:
appCyberesa myApp = ((appCyberesa)this.getApplication());
问题是,在创建Splash
实例时,调用getApplication()
将返回null
,因为还没有设置必要的底层框架(这一切都发生在调用onCreate()
之前的构造函数中)。只需将初始化移动到onCreate()
,您就会很好。对不起,Teja,同样的事情,同样的例外:(刚刚添加了Log.v(“,valueOf(Marchands.size()))
它给出了48,所以我认为它不是空的?!所以唯一的选择是myApp
是空的?你可以很容易地通过调试程序检查这个。下面是myApp声明:appCyberesa myApp=((appCyberesa)this.getApplication())
它不能为null,non?!你在清单中声明了吗?
我通过向appCyberesa类添加静态修饰符部分解决了这个问题,但问题是当我这样做时:someVar=appCyberesa.getHProviders();
我对someVar进行了更改,我还修改了appCyberesa.getHProviders()当我再次阅读时,更改了。NullPointerException
在源代码中给出了它发生的行。请确切告诉我们NPE发生在哪一行。它发生在这里:myApp.setHProviders(Marchands);
appCyberesa myApp = ((appCyberesa)this.getApplication());