【问题标题】:pass the URL to multiple non-activity java class android将 URL 传递给多个非活动 java 类 android
【发布时间】:2016-04-21 08:25:45
【问题描述】:

在这两个活动中,我都传递了这个 URL http://example.com/ss.svc/APIabc?A=10&Key=XXXXX&From=19&To=221&Date=19-Apr-2016,但问题是我正在将一些动态参数传递给我传递给 CustomizedListView.java 活动的链接和我传递的同一个动态链接想传递给 XMLParser.java ,我无法传递....目前我将静态链接粘贴到 XMLParser.java 但我想获取在 CustomizedListView.java 活动中动态传递的链接。

我在 CustomizedListView.java 中这样做过

Intent i4 = new Intent(this, XMLParser.class);
        i4.putExtra("epuzzle", URL);
         Log.d("URLURLURLURLURL ", "> " + URL);
        startActivity(i4); 

我在 XMLParser.java 中也这样做过

Intent intent = getIntent();
String easyPuzzle = intent.getExtras().getString("epuzzle");

CustomizedListView.java

public class CustomizedListView extends Activity {
        // All static variables
        static final String URL = "http://example.com/ss.svc/APIabc?A=10&Key=XXXXX&From=19&To=221&Date=19-Apr-2016";
        // XML node keys 
        static final String KEY_SONG = "Route"; // parent node
    static final String KEY_ID = "Avail";
    static final String KEY_TITLE = "Avail";
    static final String KEY_ARTIST = "Avail";
    static final String KEY_ARTIST2 = "Avail";
    static final String KEY_DURATION = "Avail";
    static final String KEY_THUMB_URL = "thumb_url";

        ListView list;
        LazyAdapter adapter;

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

            ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

            XMLParser parser = new XMLParser();
            String xml = parser.getXmlFromUrl(URL); // getting XML from URL
            Document doc = parser.getDomElement(xml); // getting DOM element

            NodeList nl = doc.getElementsByTagName(KEY_SONG);
            // looping through all song nodes <song>
            for (int i = 0; i < nl.getLength(); i++) {
                // creating new HashMap
                HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();
                Element e = (Element) nl.item(i);
                // adding each child node to HashMap key =&gt; value
                map.put(KEY_ID, parser.getValue(e, KEY_ID));
                map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
                map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
                map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
                map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));

                // adding HashList to ArrayList
                songsList.add(map);
            }

            list=(ListView)findViewById(R.id.list);

            // Getting adapter by passing xml data ArrayList
            adapter=new LazyAdapter(this, songsList);
            list.setAdapter(adapter);

            // Click event for single list row
            list.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView&lt;?&gt; parent, View view,
                        int position, long id) {

                }
            });
        }
    }

XMLParser.java

public class XMLParser {

    // constructor
    public XMLParser() {

    }

    /**
     * Getting XML from URL making HTTP request
     * @param url string
     * */
    public String getXmlFromUrl(String url) {
        String xml = null;

        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // return XML
        return xml;
    }

    /**
     * Getting XML DOM element
     * @param XML string
     * */
    public Document getDomElement(String xml){
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {

            DocumentBuilder db = dbf.newDocumentBuilder();

           // InputSource is = new InputSource();
             //   is.setCharacterStream(new StringReader(xml));
                doc = db.parse("http://example.com/ss.svc/APIabc?A=10&Key=XXXXX&From=19&To=221&Date=19-Apr-2016"); 

            } catch (ParserConfigurationException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            } catch (SAXException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            } catch (IOException e) {
                Log.e("Error: ", e.getMessage());
                return null;
            }

            return doc;
    }

    /** Getting node value
      * @param elem element
      */
     public final String getElementValue( Node elem ) {
         Node child;
         if( elem != null){
             if (elem.hasChildNodes()){
                 for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                     if( child.getNodeType() == Node.TEXT_NODE  ){
                         return child.getNodeValue();
                     }
                 }
             }
         }
         return "";
     }

     /**
      * Getting node value
      * @param Element node
      * @param key string
      * */
     public String getValue(Element item, String str) {
            NodeList n = item.getElementsByTagName(str);
            return this.getElementValue(n.item(0));
        }
}

之前我的问题是 Earlier Problem 所以我通过了静态链接然后它完美地工作了......现在问题出现了,使动态生成的链接在两个 Java 文件。

【问题讨论】:

  • 在你的代码中XMLParser 不是Activity,对吧?
  • 你说得对,这不是一项活动
  • XMLParser 不是Activity,为什么你使用IntentstartActivity
  • @PhanVănLinh 实际上是我的朋友我的问题是这个stackoverflow.com/questions/36734137/… 所以我通过了静态链接然后它工作得很好......现在问题出现了,使动态生成的链接在两个 java 文件。
  • @PhanVănLinh 有什么想法吗?

标签: java android android-intent xml-parsing uri


【解决方案1】:

我得到了解决方案,实际上我的方法是将值从活动类传递给非活动类。

所以,我收到了 XMLParser.java 的值,如下所示

     public Document getDomElement(String xml){
            Document doc = null;
<-------------LIKE THIS--------------------------->
            String var = CustomizedListView.URL;
<---------------------------------------->
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            try {

                DocumentBuilder db = dbf.newDocumentBuilder();

                //InputSource is = new InputSource();
                  //  is.setCharacterStream(new StringReader(xml));
                    doc = db.parse(var); 

如果对你有帮助,请点赞。

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多