【问题标题】:pass data from activity to next activity in android using bundle使用bundle将数据从活动传递到android中的下一个活动
【发布时间】:2012-12-07 12:53:58
【问题描述】:

我必须将数据从一个活动传递到下一个活动。

我在第一个活动中使用了以下代码:

   static String KEY_CATEGORY = "Category";
 static final String KEY_TITLE = "Categoryname";
lview3.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            //HashMap<String, String> map = songsList.get(position);
         switch (position)
         {
             case Tech:
                 Intent tech = new Intent(MainActivity.this, com.ssmobileproductions.catalogue.SubCate.class);
                 tech.putExtra(KEY_TITLE, "Books");
                 startActivity(tech);   
                 break;
             case Sport:
                 Intent sport = new Intent(MainActivity.this, com.ssmobileproductions.catalogue.SubCate.class);
                 sport.putExtra(KEY_TITLE, "CD-DVD-Video");
                    startActivity(sport);   
                 break;


             default:
                 break;
         }

在第二个活动中必须使用以下代码:

    static String KEY_CATEGORY = "SubCategory";
 static  final String KEY_SUBCATE = "subcategoryname";
 static final String KEY_TITLE = "Categoryname";
Bundle bdl = getIntent().getExtras();
     KEY_CATEGORY = bdl.getString(KEY_TITLE);

我的数据具有价值。 但是我必须运行该应用程序意味着我的屏幕变空了。这里做错了什么。请帮助我。

这是完整的源代码: MainACtivity.java

SubCate.java

编辑:

这是我的 AndroidManifest.xml 文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Light.NoTitleBar" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".SubCate"
        android:label="@string/app_name" />

</application>

这是我的 xml 提要:

<Feed>
 <category>
  <Category>
      <Categoryname>Books</Categoryname>
          <SubCategory>
          <subcategoryname>Internet</subcategoryname>
          </SubCategory>
          <SubCategory>
          <subcategoryname>Software</subcategoryname>
           </SubCategory>
   </Category>
   <Category> 
        <Categoryname>CD-DVD-Video</Categoryname>
             <SubCategory>
             <subcategoryname>CD</subcategoryname>
             </SubCategory>
              <SubCategory>
              <subcategoryname>DVD</subcategoryname>
              </SubCategory>
   </Category>
   </category>
   </Feed>

这是我的期望输出,例如:

Books
CD-DVD-Video

我必须点击 书籍 意味着它进入下一个活动并且必须仅显示该书籍子类别。(即)我必须点击书籍类别意味着我必须仅显示 Internet 和软件。

我必须单击 CD-DVD-Video 表示它转到下一个活动并且必须仅显示该 CD-DVd-Video 子类别。(即)我必须单击 CD-DVD-Video类别意味着我必须只显示 CD、DVD。

这是我当前的输出

但是我必须运行该应用程序意味着我在第一次活动时获得书籍和 cd-dvd-video。我必须单击任何类别意味着显示空白屏幕。请帮助我。这里发生了什么错误。

编辑:

在这些第二个活动(SubCate.java)文件中,我已删除以下行

Bundle bdl = getIntent().getExtras();  
KEY_CATEGORY = bdl.getString(KEY_TITLE);

在我必须运行该应用程序之后,意味着我已经在第一页上显示了 Books CD-DVD-Video 类别。之后,我必须单击任何类别意味着我已经在每个类别列表中显示了所有子类别。

例如:

我必须点击图书类别意味着我必须只显示 Internet 和软件。但这里显示的是 Internet、软件、cd、dvd。 而且我必须单击CD-DVD-Video类别意味着我必须仅显示CD,DVD。但这里也显示了4个子类别。这里做错了什么。请帮助我。

【问题讨论】:

  • 您是否在清单文件中输入了第二个文件活动?
  • 你已经添加到 AndroidManifest.xml 文件中
  • 使用 getIntent().getStringExtra(KEY_TITLE);
  • 如果你有空然后把你的代码发给我这个链接我解决你的问题。pastie.org/4795861
  • @NiravRanpara 这里的应用程序不会强制关闭。我必须点击任何类别意味着它会进入下一个活动并显示空白屏幕。

标签: java android android-intent nullpointerexception bundle


【解决方案1】:

将清单文件中的活动名称更改如下:

 <activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:name=".SubCate"
    android:label="@string/app_name" />

活动:

lview3.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
        //HashMap<String, String> map = songsList.get(position);
     switch (position)
     {
         case Tech:
             Intent tech = new Intent(MainActivity.this, SubCate.class);
             tech.putExtra(KEY_TITLE, "Books");
             startActivity(tech);   
             break;
         case Sport:
             Intent sport = new Intent(MainActivity.this, SubCate.class);
             sport.putExtra(KEY_TITLE, "CD-DVD-Video");
                startActivity(sport);   
             break;


         default:
             break;
     }

在您的第二个活动中执行以下操作:

String key = getIntent().getStringExtra(KEY_TITLE);

【讨论】:

  • @user1859172 :你怎么知道你没有从一个活动中获取数据。只需发布您的xml。我确定您没有传递正确的 TAG 进行解析
  • 请检查我编辑的问题并给我解决方案
  • @Nunu 现在我已经更改了我的清单文件并在我的第二个活动中添加了这些行。现在我必须运行该应用程序意味着正在获取书籍和 CD-DVD-Video。如果我必须单击任何类别意味着已显示每个类别的所有子类别。但我希望单击任何类别意味着正在获取属于类别的子类别。例如:我必须单击图书类别意味着我必须仅显示 Internet 和软件。但这里显示 4 Internet ,software,cd,dvd.also 我必须点击 CD-DVD-Video 类别意味着我必须只显示 CD,DVd。但这里也显示了 4 个子类别。这里做错了什么
【解决方案2】:

只做广告关注

意图 i = getIntent();

if(i != null){

   String Title = i.getExtra.getString(KEY_TITLE);

}

【讨论】:

  • 真正令人兴奋的答案,如果意图为空,那么您如何从意图中获得价值。
  • 但这不是答案,因为如果他正在发送静态值,则用于将值从一个活动发送到第二个活动的代码是正确的。问题在 xml 解析中的某个地方。可能是他没有发送正确的 XML TAG
猜你喜欢
  • 2012-12-08
  • 1970-01-01
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 2011-12-20
相关资源
最近更新 更多