在两个活动之间传递值的ArrayList.错误



我试图在两个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

您可以使用服务中intentgetExtraputExtra方法将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();
....

我希望这会有所帮助。

相关内容

最新更新