【问题标题】:Unable to recieve data, from Intent in new activity.无法从新活动中的 Intent 接收数据。
【发布时间】:2014-03-13 06:35:38
【问题描述】:

嗯,正如我在标题中提到的,我无法从一个活动中获取数据,到另一个活动。我正在制作一个非常简单的 RSS 阅读器,它异步加载数据,将它们发送到 listview 并在新活动的 webview 中打开选定的文章。问题是,当我尝试使用 webview 启动活动时,无法从主要活动传递数据。 所以这就是我正在做的事情:

1) 在第一个活动(主要活动)中,我从我的 listview 元素中获取数据,用户点击:

lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
        News clicked = (News) adapter.getItem(arg2);
        String clickedTitle = clicked.title;
        String clickedLink = clicked.link;

        System.out.println("Title: " + clickedTitle + " / LINK: " + clickedLink);  /*Here I can see my data in logs -> they are correct at this moment*/

        Intent intent = new Intent(MainActivity.this, OpenFullArticle.class);
        intent.putExtra(clickedTitle, "clickedTitle");
        intent.putExtra(clickedLink, "clickedLink");
        startActivity(intent);
        } 
});

所以现在一切正常,但是,当一个新的活动开始时(OpenFullArticle 活动),我正在这样做:

public class OpenFullArticle extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_open_full_article);

        String title = getIntent().getExtras().getString("clickedTitle");
        String link = getIntent().getStringExtra("clickedLink");


        System.out.println(title); //Tried link too, simultaneous each one - both ar null
    }

所以我被困在这一刻,不知道我做错了什么。尝试了调试器,检查了 Intent,它没有额外的东西,这是我在第一个活动中添加的。 也许你可以给我一个线索,什么会导致这样一个奇怪的问题。

附:如果有需要,我可以提供完整的代码或者github上的完整项目。

【问题讨论】:

    标签: java android android-intent nullpointerexception android-activity


    【解决方案1】:

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

     Intent intent = new Intent(MainActivity.this, OpenFullArticle.class);
                intent.putExtra( "clickedTitle",clickedTitle);
                intent.putExtra("clickedLink", clickedLink, );
                startActivity(intent);
    

    【讨论】:

      【解决方案2】:

      改成

      intent.putExtra("clickedTitle", clickedTitle); 
      // the first pram is the key
      // the second is the value
      intent.putExtra("clickedLink", clickedLink);
      

      http://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String, android.os.Bundle)

      同时使用Log 代替System.out.println

      http://developer.android.com/reference/android/util/Log.html

      【讨论】:

        【解决方案3】:

        错误在这一行:

        intent.putExtra(clickedTitle, "clickedTitle");
        intent.putExtra(clickedLink, "clickedLink");
        

        你需要先给key再给value:

        intent.putExtra("clickedTitle", clickedTitle);
        

        【讨论】:

          【解决方案4】:

          替换

          intent.putExtra(clickedTitle, "clickedTitle");
                  intent.putExtra(clickedLink, "clickedLink");
          

          intent.putExtra("clickedTitle",clickedTitle);
                  intent.putExtra("clickedLink",clickedLink);
          

          【讨论】:

          • 天哪!似乎连续 13 个小时的编码让我的大脑变得迟钝。对于这样一个noobiuos问题,我真的很抱歉,但我无法自己解决。感谢帮助!附言奇怪的是,Eclipse 没有将其识别为语法错误,或者它不应该?
          • 不是语法错误。键或值都是字符串。而 clickedLink, clickedTitle 在你的情况下是字符串。 :)
          【解决方案5】:

          在您的第一个活动中使用以下代码

           Intent intent = new Intent(MainActivity.this, OpenFullArticle.class);
              intent.putExtra( "clickedTitle",clickedTitle);
              intent.putExtra("clickedLink", clickedLink, );
              startActivity(intent);
          

          【讨论】:

            【解决方案6】:

            最初尝试通过将一些硬编码值传递给 extras 来隔离问题

            喜欢 intent.putExtra("id",1); intent.putExtra("name","abc");

            并检查 OpenFullArticle 活动是否具有附加功能。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-12-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多