我试图在两个Activities之间传递值的ArrayList,但我遇到了如下错误。提前感谢
由以下原因引起:java.lang.NullPointerException:试图在com.example.android.myapplication.DetailActivity.getextras1(DetailActivity.java:35)上的空对象引用上调用虚拟方法"android.os.Bundle android.content.Interent.getExtras()"(位于android.app.ActivityThread.handleServiceArgs)(ActivityThread.java:3180)在android.app.ActivityThreads.access$2200(ActivityTthread.java:182)在android.app.activeThread$H.handleMessagejava.lang.reflect.Method.ioke(Method.java:372)在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)在com.android.internal.os.ZygateInit.main(Zygateinit.java:755)
用于调用其他活动的代码
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
String[] appdescription = getResources().getStringArray(R.array.appdescriptionname);
final String appdescipl = appdescription[position];
final int imagesList = noImagesList[position];
final int imagesList2 = noImagesList2[position];
Intent intent1 = new Intent(getApplicationContext(), DetailActivity.class);
intent1.putExtra("des","mydes");
intent1.putExtra("appdescipl" , appdescipl);
intent1.putExtra("imagesList",imagesList);
intent1.putExtra("imagesList2",imagesList2);
startActivity(intent1);
}
});
DetailActivity
public class DetailActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detail_activity);
this.getextras1();
this.getdescriptionofapp1();
this.getImage1ofapp1();
this.getImage2ofapp1();
startService(new Intent(this, MyService.class));
}
public Bundle getextras1() {
Bundle extras1 = getIntent().getExtras();
return extras1;
}
public TextView getdescriptionofapp1() {
TextView descriptionofapp1 = (TextView) findViewById(R.id.descriptionofapp);
return descriptionofapp1;
}
public ImageView getImage1ofapp1() {
ImageView image1ofapp1 = (ImageView) findViewById(R.id.image1);
return image1ofapp1;
}
public ImageView getImage2ofapp1() {
ImageView image2ofapp1 = (ImageView) findViewById(R.id.image2);
return image2ofapp1;
}
}
MyService
public class MyService extends Service {
public String description;
public int image1;
public int image2;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
DetailActivity i ;
i = new DetailActivity();
Bundle extras = i.getextras1();
TextView descriptionofapp = i.getdescriptionofapp1();
ImageView image1ofapp = i.getImage1ofapp1();
ImageView image2ofapp = i.getImage2ofapp1();
if ( extras.containsKey("des")){
description = extras.getString("appdescipl");
descriptionofapp.setText(description);
image1 = extras.getInt("imagesList");
image1ofapp.setImageResource(image1);
image2 = extras.getInt("imagesList2");
image2ofapp.setImageResource(image2);
}
else if (extras.containsKey("data")){
description = extras.getString("appdatadescipl");
descriptionofapp.setText(description);
image1 = extras.getInt("imagesOfLists");
image1ofapp.setImageResource(image1);
image2 = extras.getInt("imagesOfLists2");
image2ofapp.setImageResource(image2);
}
this.onDestroy();
return START_STICKY;
}
@Override
public void onDestroy() {
this.stopSelf();
}
}
问题在这里
DetailActivity i ;
i = new DetailActivity();
Bundle extras = i.getextras1();
您正在创建Activity
类的新instance
,但您在Activity
的另一个instance
中分配了bundle
。
您可以使用服务中intent
和getExtra
的putExtra
方法将bundle
传递给您的服务以提取它
使用receiver从服务更新您的视图。你的做法不对
看看那里来自服务的Android更新活动UI
为每个对象使用特定的putextra:
intent1.putStringExtra("des","mydes");
intent1.putStringExtra("appdescipl" , appdescipl);
intent1.putIntExtra("imagesList",imagesList);
intent1.putIntExtra("imagesList2",imagesList2);
然后在DetailActivity 中使用相等的getExtra
getIntent().getStringExtra("des");
getIntent().getStringExtra("appdescipl");
getIntent().getIntExtra("imagesList");
getIntent().getIntExtra("imagesList2");
我希望这会有帮助。
最好将Parcelable对象用于多个参数。假设你有一个类,Foo正确地实现了Parcelable,把它放在活动中的Intent中:
Intent intent = new Intent(getApplicationContext(), DetailActivity.class);
Foo foo = new Foo();
intent.putExtra("foo ", foo);
startActivity(intent);
要在DetailActivity中从意图获得它:-
Foo foo = getIntent().getExtras().getParcelable("foo");
String appDisc = foo.getDisc();
int appImage1 = foo.getImage1();
int appImage2 = foo.getImage2();
....
我希望这会有所帮助。