Android GetExtras不工作
我正试着从活动A发送额外的信息到活动B。 发送部分很好,变量不是空的,但我不知道如何在活动B中获取它们。 这是发送的代码:Android GetExtras不工作,android,android-intent,Android,Android Intent,我正试着从活动A发送额外的信息到活动B。 发送部分很好,变量不是空的,但我不知道如何在活动B中获取它们。 这是发送的代码: public void sendToFavorites(Context context){ String vID,vThumbnail,vTitle; vID = sendResult.getId().getVideoId(); vThumbnail = sendResult.getSnippet().getThumb
public void sendToFavorites(Context context){
String vID,vThumbnail,vTitle;
vID = sendResult.getId().getVideoId();
vThumbnail = sendResult.getSnippet().getThumbnails().getMedium().getUrl();
vTitle = sendResult.getSnippet().getTitle();
Intent fav = new Intent(context,Favorites.class);
fav.putExtra("title",vTitle);
fav.putExtra("thumbnail",vThumbnail);
fav.putExtra("id",vID);
}
这是获取以下信息的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.favorites_layout);
getSupportActionBar().setTitle("Favorites");
initializeViews();
//////////////////
Bundle extras = getIntent().getExtras();
vidID = extras.getString("id");
vidTitle = extras.getString("title");
vidThumbnail = extras.getString("thumbnail");
loadFavorites();
}
在这里,我开始活动B:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.favorites:
intent = new Intent(this, Favorites.class);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
由于某些原因,当我在没有日志的情况下启动活动B时,应用程序崩溃
我在干什么
public void sendToFavorites(Context context){
String vID,vThumbnail,vTitle;
vID = sendResult.getId().getVideoId();
vThumbnail = sendResult.getSnippet().getThumbnails().getMedium().getUrl();
vTitle = sendResult.getSnippet().getTitle();
Intent fav = new Intent(context,Favorites.class);
fav.putExtra("title",vTitle);
fav.putExtra("thumbnail",vThumbnail);
fav.putExtra("id",vID);
}
您的Intent
对象fav
仅适用于此方法。由于您从未在此方法中调用startActivity(fav)
,因此无论您如何启动Activity B
都不会包含您的捆绑数据。有两种可能的替代方案-要么将fav
声明为类变量,然后再引用它,如下所示:
public class MyClass extends ... {
Intent fav;
//...
public void sendToFavorites(Context context){
String vID,vThumbnail,vTitle;
vID = sendResult.getId().getVideoId();
vThumbnail = sendResult.getSnippet().getThumbnails().getMedium().getUrl();
vTitle = sendResult.getSnippet().getTitle();
fav = new Intent(context,Favorites.class);
fav.putExtra("title",vTitle);
fav.putExtra("thumbnail",vThumbnail);
fav.putExtra("id",vID);
}
//...later, during a button click....
if (fav != null) {
startActivity(fav);
}
或者,如我所愿,将sendToFavourites()
方法中的逻辑放在click事件中:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.favorites:
String vID,vThumbnail,vTitle;
vID = sendResult.getId().getVideoId();
vThumbnail = sendResult.getSnippet().getThumbnails().getMedium().getUrl();
vTitle = sendResult.getSnippet().getTitle();
Intent fav = new Intent(context, Favorites.class); //Could use "this" instead of context if this class extends Activity
fav.putExtra("title",vTitle);
fav.putExtra("thumbnail",vThumbnail);
fav.putExtra("id",vID);
startActivity(fav);
}
return super.onOptionsItemSelected(item);
}
你是在打电话给startActivity(fav)开始活动B吗?@PPartisan不,活动B在另一个地方开始,我只想发送数据。请你也发布日志。你说活动B在另一个地方开始是什么意思,我发送数据并不意味着任何事情!我会尝试并更新它。我更喜欢第一个想法。这很好-只是在第一个例子中,你必须考虑
fav
为空的情况。也许你可以在第二个补丁中包含代码,作为if…else…
语句的一部分,以防fav
没有被实例化。我尝试了第一个想法,但运气不好,它不会进入收藏夹。我试图在sendToFavorites中添加startActivity,但它崩溃了。这是我得到的错误:尝试在空对象引用上调用虚拟方法“android.app.ActivityThread$ApplicationThread android.app.ActivityThread.getApplicationThread()”,如果将LogCat
输出复制到OP中会有所帮助,但是首先我可以问一下,您对上下文参数使用了什么吗?如果您的类扩展了活动
,请尝试使用此
而不是上下文
。如果它扩展了片段
,请使用getActivity()
。