2013-07-27 28 views
0

我想將java類鏈接到我的xml文件。 然而,編碼沒有任何錯誤,它給了我強制關閉。 我想知道它有什麼問題。 任何人都可以請教我嗎?將java類鏈接到android中的xml文件

我有一個主要的java類,具有相同的代碼,因爲我想爲這兩個xml佈局顯示相同的東西。 然而,當我嘗試將編碼轉換爲第二個java類時,主要的java類完全正常工作,發生強制關閉錯誤。

這是我的編碼。

public class event extends ListActivity{ 

    ArrayList<String> psi; 

     public TextView psi_text; 

    TextView weather; 
    ImageView image; 
    private static Handler mHandler = new Handler(); 
    class MyWeather{ 


     String conditiontext; 
     String conditiontemp; 
     String conditiondate; 



     public String forecastToString(){ 

     return 
     conditiontext + "\n" + "  " + conditiontemp + "°C" ; 

     } 

    } 
     String[] Category = { 
       "Scientist for a day", 
       "Science Trail", 
       "Megalog Return" 



     }; 

     String [] dates = { 
       "Today", 
       "Tomorrow", 
       "This Week" 

     }; 

     Spinner s1; 
    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.event); 
      weather = (TextView)findViewById(R.id.weather); 
      image = (ImageView)findViewById(R.id.image); 
      psi = new ArrayList<String>();    
      psi_text = (TextView) findViewById(R.id.psi_text); 


      TabHost th =(TabHost)findViewById(R.id.tabhost); 
      th.setup(); 
      TabSpec specs = th.newTabSpec("tag1"); 
      specs.setContent(R.id.tab1); 
      specs.setIndicator("Suggested"); 
      th.addTab(specs); 
      specs = th.newTabSpec("tag2"); 
      specs.setContent(R.id.tab2); 
      specs.setIndicator("All"); 
      th.addTab(specs); 

      TabWidget tw = (TabWidget) th.findViewById(android.R.id.tabs); 
      View tab1 = tw.getChildTabViewAt(0); 
      TextView tv = (TextView) tab1.findViewById(android.R.id.title); 
      tv.setTextSize(15); 
      tv.setPadding(0, 0, 0, 50); 

      View tab2 = tw.getChildTabViewAt(1); 
      TextView tv1 = (TextView) tab2.findViewById(android.R.id.title); 
      tv1.setTextSize(15); 
      tv1.setPadding(0, 0, 0, 50); 



     //GridView 
      setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Category)); 

      //SpinnerView 
      s1 = (Spinner) findViewById(R.id.spinner1); 

      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, dates); 
     s1.setAdapter(adapter); 
     s1.setOnItemSelectedListener(new OnItemSelectedListener() 
     { 
      public void onItemSelected(AdapterView<?> arg0,View arg1, int arg2, long arg3) { 
       int index = s1.getSelectedItemPosition(); 
       Toast.makeText(getBaseContext(), "You have seleted item :" + dates[index] , Toast.LENGTH_SHORT).show(); 
      } 
      public void onNothingSelected(AdapterView<?>arg0) {} 
      }); 



      try { 

       URL url = new URL(
         "http://app2.nea.gov.sg/data/rss/nea_psi.xml"); 
       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder db = dbf.newDocumentBuilder(); 
       Document doc = db.parse(new InputSource(url.openStream())); 
       doc.getDocumentElement().normalize(); 

       NodeList nodeList = doc.getElementsByTagName("item"); 
       for (int i = 0; i < nodeList.getLength(); i++) { 

        Node node = nodeList.item(i);  

        Element fstElmnt = (Element) node;     

        NodeList websiteList = fstElmnt.getElementsByTagName("psi"); 
        Element websiteElement = (Element) websiteList.item(0); 
        websiteList = websiteElement.getChildNodes(); 

        psi.add(""+ ((Node) websiteList.item(0)).getNodeValue());   

       } 
      } catch (Exception e) { 
       System.out.println("XML Pasing Excpetion = " + e); 
      } 



      String temp = Html.fromHtml(psi.get(0)).toString(); 
      String a[] = temp.split("\\)"); 
      psi_text.setText(""+a[0]+")"); 


      Thread myThread = new Thread(new Runnable(){ 

       @Override 
        public void run() { 
        String weatherString = QueryYahooWeather(); 
          Document weatherDoc = convertStringToDocument(weatherString); 

          final MyWeather weatherResult = parseWeather(weatherDoc); 
          runOnUiThread(new Runnable(){ 

           @Override 
           public void run() { 
            weather.setText(weatherResult.forecastToString()); 
           }}); 

           }}); 
            myThread.start(); 
           } 

    private MyWeather parseWeather(Document srcDoc){ 

     MyWeather myWeather = new MyWeather(); 

      //<yweather:condition.../> 
     Node conditionNode = srcDoc.getElementsByTagName("yweather:condition").item(0); 


     String weatherCode = conditionNode.getAttributes() 
       .getNamedItem("code") 
       .getNodeValue() 
       .toString(); 

     // thunderstorms 
     if(weatherCode.equals("4")){ 

      mHandler.post(new Runnable() { 
       @Override 
       public void run() { 
        // This gets executed on the UI thread so it can safely modify 
        // Views 

        image.setImageResource(R.drawable.thunderstorm); 
       } 
      }); 
     } 

     //isolated thunderstorms 
     else if (weatherCode.equals("37")) { 
        mHandler.post(new Runnable() { 
         @Override 
         public void run() { 

          image.setImageResource(R.drawable.thunderstorm); 
         } 
        }); 
       } 


     //scattered thunderstorms 
     else if (weatherCode.equals("38")) { 
        mHandler.post(new Runnable() { 
         @Override 
         public void run() { 

          image.setImageResource(R.drawable.thunderstorm); 
         } 
        }); 
       } 

     //scattered thunderstorms 
     else if (weatherCode.equals("39")) { 
        mHandler.post(new Runnable() { 
         @Override 
         public void run() { 

          image.setImageResource(R.drawable.thunderstorm); 
         } 
        }); 
       } 

     //thundershowers 
     else if (weatherCode.equals("45")) { 
        mHandler.post(new Runnable() { 
         @Override 
         public void run() { 

          image.setImageResource(R.drawable.thunderstorm); 
         } 
        }); 
       } 

     //isolated thundershowers 
     else if (weatherCode.equals("47")) { 
        mHandler.post(new Runnable() { 
         @Override 
         public void run() { 

          image.setImageResource(R.drawable.thunderstorm); 
         } 
        }); 
       } 

     //drizzle 
     else if (weatherCode.equals("9")) { 
        mHandler.post(new Runnable() { 
         @Override 
         public void run() { 

          image.setImageResource(R.drawable.rainy); 
         } 
        }); 
       } 

     //showers 
     else if (weatherCode.equals("11")) { 
        mHandler.post(new Runnable() { 
         @Override 
         public void run() { 

          image.setImageResource(R.drawable.rainy); 
         } 
        }); 
       } 

//showers 
else if (weatherCode.equals("12")) { 
    mHandler.post(new Runnable() { 
     @Override 
     public void run() { 

      image.setImageResource(R.drawable.rainy); 
     } 
    }); 
} 

     //scattered showers 
else if (weatherCode.equals("40")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.rainy); 
      } 
     }); 
    } 

     //hail 
else if (weatherCode.equals("17")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.hail); 
      } 
     }); 
    } 


     //mixed rain and hail 
else if (weatherCode.equals("35")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.hail); 
      } 
     }); 
    } 

     //foggy 
else if (weatherCode.equals("20")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.foggy); 
      } 
     }); 
    } 

     //haze 
else if (weatherCode.equals("21")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.foggy); 
      } 
     }); 
    } 

     //smoky 
else if (weatherCode.equals("22")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.foggy); 
      } 
     }); 
    } 

     //windy 
else if (weatherCode.equals("24")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.windy); 
      } 
     }); 
    } 

     //cloudy 
else if (weatherCode.equals("26")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.cloudy); 
      } 
     }); 
    } 

     //fair (night) 
else if (weatherCode.equals("33")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.cloudy); 
      } 
     }); 
    } 

     //fair (day) 
else if (weatherCode.equals("34")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.cloudy); 
      } 
     }); 
    } 

     //partly cloudy 
else if (weatherCode.equals("44")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.cloudy); 
      } 
     }); 
    } 

     //mostly cloudy (night) 
else if (weatherCode.equals("27")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.night_cloudy); 
      } 
     }); 
    } 

     //partly cloudy (night) 
else if (weatherCode.equals("29")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.night_cloudy); 
      } 
     }); 
    } 

     //mostly cloudy (day) 
else if (weatherCode.equals("28")) { 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 

       image.setImageResource(R.drawable.day_cloudy); 
      } 
     }); 
    } 


     //partly cloudy (day) 
    else if (weatherCode.equals("30")) { 
      mHandler.post(new Runnable() { 
       @Override 
       public void run() { 

        image.setImageResource(R.drawable.day_cloudy); 
       } 
      }); 
     } 




     //clear(night) 
    else if (weatherCode.equals("31")) { 
      mHandler.post(new Runnable() { 
       @Override 
       public void run() { 

        image.setImageResource(R.drawable.moon); 
       } 
      }); 
     } 


     //sunny 
    else { 
      mHandler.post(new Runnable() { 
       @Override 
       public void run() { 

        image.setImageResource(R.drawable.sunny); 
       } 
      }); 
     } 




     myWeather.conditiontext = conditionNode.getAttributes() 
    .getNamedItem("text") 
    .getNodeValue() 
    .toString(); 

     myWeather.conditiontemp = conditionNode.getAttributes() 
        .getNamedItem("temp") 
        .getNodeValue() 
        .toString(); 




    return myWeather; 
    } 

    private Document convertStringToDocument(String src){ 

    Document dest = null; 
    DocumentBuilderFactory dbFactory = 
    DocumentBuilderFactory.newInstance(); 
    DocumentBuilder parser; 

    try { 
    parser = dbFactory.newDocumentBuilder(); 
    dest = parser.parse(new ByteArrayInputStream(src.getBytes())); 
    } catch (ParserConfigurationException e1) { 
    e1.printStackTrace(); 
    Toast.makeText(event.this, 
     e1.toString(), Toast.LENGTH_LONG).show(); 
    } catch (SAXException e) { 
    e.printStackTrace(); 
    Toast.makeText(event.this, 
     e.toString(), Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    Toast.makeText(event.this, 
     e.toString(), Toast.LENGTH_LONG).show(); 
    } 

    return dest; 
    } 

    private String QueryYahooWeather(){ 

    String qResult = ""; 
    String queryString = "http://weather.yahooapis.com/forecastrss?w=1062617&u=c"; 

    HttpClient httpClient = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet(queryString); 

    try { 
    HttpEntity httpEntity = httpClient.execute(httpGet).getEntity(); 

    if (httpEntity != null){ 
    InputStream inputStream = httpEntity.getContent(); 
    Reader in = new InputStreamReader(inputStream); 
    BufferedReader bufferedreader = new BufferedReader(in); 
    StringBuilder stringBuilder = new StringBuilder(); 

    String stringReadLine = null; 

    while ((stringReadLine = bufferedreader.readLine()) != null) { 
     stringBuilder.append(stringReadLine + "\n"); 
    } 

    qResult = stringBuilder.toString(); 
    } 
    } catch (ClientProtocolException e) { 
    e.printStackTrace(); 
    Toast.makeText(event.this, 
     e.toString(), Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    Toast.makeText(event.this, 
     e.toString(), Toast.LENGTH_LONG).show(); 
    } 

    return qResult; 
    } 

    public void onListItemClick(ListView parent, View v, int position,long id) 
    { 
    Toast.makeText(this, "You have selected " + Category[position], Toast.LENGTH_SHORT).show(); 
    } 

} 

回答

0

你沒有

setContentView(R.layout.YOUR_XML_NAME); 
在您的活動

。這就是爲什麼你無法連接你的java類和xml文件