2011-06-07 172 views
0

我已經發布了這個問題,但編輯了很多次,我想我會再次發佈所有代碼和Eclipse包下載。加載Xml按鈕按ANDROID

我沒有得到任何錯誤/問題後,我改變類擴展活動類擴展ListActivity。

如果有人看到我的問題,可能會迫使應用程序關閉,請讓我知道。謝謝!

ECLIPSE PROJECT DOWNLOAD

patriotsar.java

package com.patriotsar; 




import java.util.ArrayList; 
import java.util.HashMap; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 

import com.patriotsar.XMLfunctions; 


import android.app.ListActivity; 

import android.content.ActivityNotFoundException; 
import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 









public class patriosar extends ListActivity { 

    private Button goButton; 
    private Button quoteButton; 

    String url = "http://www.patriotsar.com"; 
    Intent i = new Intent(Intent.ACTION_VIEW); 
    Uri u = Uri.parse(url); 
    Context context = this; 



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



     goButton = (Button)findViewById(R.id.goButton); 
     quoteButton = (Button)findViewById(R.id.quoteButton); 

     goButton.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v){ 
       try { 
         // Start the activity 
         i.setData(u); 
         startActivity(i); 
        } catch (ActivityNotFoundException e) { 
         // Raise on activity not found 
         Toast.makeText(context, "Browser not found.", Toast.LENGTH_SHORT); 
        } 
        } 
     }); 

     quoteButton.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v){ 
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 


       String xml = XMLfunctions.getXML(); 
       Document doc = XMLfunctions.XMLfromString(xml); 

       int numResults = XMLfunctions.numResults(doc); 

       if((numResults <= 0)){ 
        Toast.makeText(patriosar.this, "Geen resultaten gevonden", Toast.LENGTH_LONG).show(); 
        finish(); 
       } 

       NodeList nodes = doc.getElementsByTagName("result"); 

       for (int i = 0; i < nodes.getLength(); i++) {       
        HashMap<String, String> map = new HashMap<String, String>();  

        Element e = (Element)nodes.item(i); 
        map.put("id", XMLfunctions.getValue(e, "id")); 
        map.put("name", "Naam:" + XMLfunctions.getValue(e, "name")); 
        map.put("Score", "Score: " + XMLfunctions.getValue(e, "score")); 
        mylist.add(map);    
       }  
//    
       ListAdapter adapter = new SimpleAdapter(patriosar.this, mylist , R.layout.main, 
           new String[] { "name", "Score" }, 
           new int[] { R.id.item_title, R.id.item_subtitle }); 

       setListAdapter(adapter); 

       final ListView lv = getListView(); 
       lv.setTextFilterEnabled(true); 
       lv.setOnItemClickListener(new OnItemClickListener() { 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {    
         @SuppressWarnings("unchecked") 
         HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);     
         Toast.makeText(patriosar.this, "ID '" + o.get("id") + "' was clicked.", Toast.LENGTH_LONG).show(); 

        } 
       }); 



       } 

     }); 

    } 
    } 

XMLfunctions.java

package com.patriotsar; 

import java.io.IOException; 
import java.io.StringReader; 
import java.io.UnsupportedEncodingException; 
import java.net.MalformedURLException; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 


public class XMLfunctions { 

    public final static Document XMLfromString(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(is); 

     } catch (ParserConfigurationException e) { 
      System.out.println("XML parse error: " + e.getMessage()); 
      return null; 
     } catch (SAXException e) { 
      System.out.println("Wrong XML file structure: " + e.getMessage()); 
      return null; 
     } catch (IOException e) { 
      System.out.println("I/O exeption: " + e.getMessage()); 
      return null; 
     } 

     return doc; 

    } 

    /** Returns element value 
     * @param elem element (it is XML tag) 
     * @return Element value otherwise empty String 
     */ 
    public final static String getElementValue(Node elem) { 
     Node kid; 
     if(elem != null){ 
      if (elem.hasChildNodes()){ 
       for(kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling()){ 
        if(kid.getNodeType() == Node.TEXT_NODE ){ 
         return kid.getNodeValue(); 
        } 
       } 
      } 
     } 
     return ""; 
    } 

    public static String getXML(){ 
      String line = null; 

      try { 

       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost("http://p-xr.com/xml"); 

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

      } catch (UnsupportedEncodingException e) { 
       line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
      } catch (MalformedURLException e) { 
       line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
      } catch (IOException e) { 
       line = "<results status=\"error\"><msg>Can't connect to server</msg></results>"; 
      } 

      return line; 

    } 

    public static int numResults(Document doc){  
     Node results = doc.getDocumentElement(); 
     int res = -1; 

     try{ 
      res = Integer.valueOf(results.getAttributes().getNamedItem("count").getNodeValue()); 
     }catch(Exception e){ 
      res = -1; 
     } 

     return res; 
    } 

    public static String getValue(Element item, String str) {  
     NodeList n = item.getElementsByTagName(str);   
     return XMLfunctions.getElementValue(n.item(0)); 
    } 
} 

ListPlaceholder.xml:

<ListView 
     android:id="@id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:drawSelectorOnTop="false" /> 

    <TextView 
     android:id="@id/android:empty" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="No data"/> 

</LinearLayout> 

main.xml中

<?xml version="1.0" encoding="utf-8"?> 

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/bgimage2"> 
    > 

<Button 
android:id="@+id/quoteButton" 
android:layout_width="150px" 
android:layout_height="wrap_content" 
android:text="@string/start" 
android:layout_x="80px" 
android:layout_y="21px" 
> 
</Button> 

<Button 
android:id="@+id/goButton" 
android:layout_width="150px" 
android:layout_height="wrap_content" 
android:text="@string/subscribe" 
android:layout_x="80px" 
android:layout_y="74px" 
> 
</Button> 

<TextView 
    android:id="@+id/textview" 
    android:layout_width="300px" 
    android:layout_height="fill_parent" 
    android:text="@string/intro" 
    android:layout_y="300px" 
    android:layout_x="20px" 
    android:textColor="#ffffff" 
    /> 

    <TextView 
    android:id="@+id/item_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:padding="2dp" 
    android:textSize="20dp" /> 
    <TextView 
    android:id="@+id/item_subtitle" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="2dp" 
    android:textSize="13dp" /> 
</AbsoluteLayout> 

Android清單文件:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.patriotsar" 
     android:versionCode="1" 
     android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="3" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".patriosar" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

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

</manifest> 

回答

2

你延長ListActivity。您在setContentView()中使用的佈局需要有ListView,編號爲@android:id/list

編輯

此外,AbsoluteLayout s的棄用。你不應該使用它們。但是,這不會導致您的應用強制關閉。

+0

我剛剛在調試模式中看到了id/list的提及。謝謝 – Denoteone 2011-06-07 04:30:59

+0

工作!我是Android開發者的初學者。你可以給我一個想法,或者當我點擊XML按鈕時,將其指向另一個關於如何更改背景(新佈局)的資源? – Denoteone 2011-06-07 04:36:58

+0

我想我發現了一些可能有助於再次感謝的東西。 – Denoteone 2011-06-07 04:44:03