0

重複の可能性:
別の画面のリスト項目の詳細

アイテムを選択すると、アプリケーションが 2 番目のアクティビティに移動し、選択したアイテムの値と、2 番目のアクティビティに存在する TextView への関連リンクを取得します。コードは機能するはずですが、実行すると、エミュレーターから「残念ながらアプリケーションが停止しました」というメッセージが表示されます。うまくいくために何をすればいいのかわからない?

public class LastActivity extends ListActivity {
    /** Called when the activity is first created. */

    static List<String> links;
    List<String> names;


    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        super.onListItemClick(l, v, position, id);
        String link=links.get(position);

        Intent intent = new Intent(getApplicationContext(),Details.class);
        intent.putExtra("name",names.get(position));
        intent.putExtra("url",link);
        Log.e("n",names.get(position)+"."+ link );
        startActivity(intent);


    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        links=new ArrayList<String>();
        names=new ArrayList<String>();
        try{
            URL url=new URL(webservice);
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(false);
            XmlPullParser xpp = factory.newPullParser();
            xpp.setInput(getInputStream(url), "UTF_8");
            boolean insideItem = false;


                    // Returns the type of current event: START_TAG, END_TAG, etc..

            int eventType = xpp.getEventType();

            while (eventType != XmlPullParser.END_DOCUMENT) {

                    if (eventType == XmlPullParser.START_TAG) {


                        if (xpp.getName().equalsIgnoreCase("item")) {

                            insideItem = true;

                        } else if (xpp.getName().equalsIgnoreCase("Name")) {

                            if (insideItem)

                                names.add(xpp.nextText()); //extract the headline

                        } else if (xpp.getName().equalsIgnoreCase("url")) {

                            if (insideItem)

                                links.add(xpp.nextText()); //extract the link of article

                        }
                    }else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")){

                        insideItem=false;

                    }

                    eventType = xpp.next(); //move to next element

                }


        }catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (XmlPullParserException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names);

                setListAdapter(adapter);

 }
    private InputStream getInputStream(URL url) {
        // TODO Auto-generated method stub
        try {
             return url.openConnection().getInputStream();
             } catch (IOException e) {
                   return null;
            }

    }

}

// 2 番目のクラスまたはアクティビティ

public class Details extends LastActivity{
    LastActivity last=new LastActivity();
    TextView tv;
    TextView url;
    String read;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.details);

        tv=(TextView) findViewById(R.id.text);
        url=(TextView) findViewById(R.id.link);
        Intent intent=getIntent();

            // receiving  data
            String name = intent.getStringExtra("name");
            String path=intent.getStringExtra("links");

            Log.e("Second Screen", name + "." + path);
            tv.setText(name);
            url.setText(path);
    }
4

1 に答える 1

1

問題は、インテントで putExtra 値を渡すことにあると思います。最初のアクティビティを確認してください。キーを「url」として使用していますが、詳細アクティビティでは「リンク」をキーとして使用しています。したがって、null Pointer Exception が発生します。適宜変更してください。

    intent.putExtra("name",names.get(position));
    intent.putExtra("url",link);

詳細アクティビティで、

        String name = intent.getStringExtra("name");
        String path=intent.getStringExtra("url");

それ以外の、

String path=intent.getStringExtra("links");

最初のアクティビティで ListActivty を拡張しました。これをアクティビティだけに置き換えてみてください。

または、xml ファイルで ListView id を @android:list に変更します。

詳細については、この質問を参照してください

また、これをチェックして、より多くのアイデアを確認してください。

コンテンツには、id 属性が「android.R.id.list」である ListView が必要です。

于 2012-07-16T11:27:58.537 に答える