2013-05-20 111 views
0

我得到關於Android的Asynctask錯誤我想使用它通過Web服務得到DATAS並結合他們在網格視圖錯誤在異步任務

public class ProductList extends Activity 

{ 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ``this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_product_list); 
     Bundle extras = getIntent().getExtras(); 
     if (extras != null) { 
      ad=extras.getString("ad"); 
      catid=extras.getString("catid"); 
      greeting=(TextView)findViewById(R.id.greetingsText); 
      greeting.setText("Ho�geldiniz, "+extras.getString("ad")); 
     } 
     Products get = new Products(); 
     try { 
      productsList=get.execute(new String[] { Integer.toString(Integer.parseInt(catid)+1) }).get(); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ExecutionException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     for (int i = 0; i < productsList.size(); i++) { 
      System.out.println(productsList.get(i).ad); 
     } 
    } 
    public ArrayList<ProductData> productsList = new ArrayList<ProductData>(); 
    public class ProductData 
    { 
     public ProductData() 
     { 

     } 

     public ProductData(int id,String ad,String fiyat,String kisaca,String link,String status) 
     { 
      this.id=id; 
      this.ad=ad; 
      this.fiyat=fiyat; 
      this.kisaca=kisaca; 
      this.link=link; 
      this.status=status; 
     } 

     public String status; 
     public int id; 
     public String ad; 
     public String fiyat; 
     public String kisaca; 
     public String link; 
    } 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    } 
    private class Products extends AsyncTask<String, ArrayList<ProductData>, ArrayList<ProductData>> { 

     @Override 
     protected ArrayList<ProductData> doInBackground(String... params) { 
      URL url; 
      ArrayList<ProductData> productsL = new ArrayList<ProductData>(); 
       try 


       { 
        url = new URL("http://www.sucukevim.com/external_services.php?service=get_product_list&&type=filter&&catid="+params[0]); 
       URLConnection connection; 
       connection = url.openConnection(); 

       HttpURLConnection httpConnection = (HttpURLConnection)connection; 
       int responseCode = httpConnection.getResponseCode(); 

       if(responseCode==HttpURLConnection.HTTP_OK) 
       { 
        InputStream in = httpConnection.getInputStream(); 

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
        DocumentBuilder db = dbf.newDocumentBuilder(); 

        Document dom = db.parse(in); 

        Element docEle = dom.getDocumentElement(); 

        NodeList nl = docEle.getElementsByTagName("product"); 
            for (int i = 0; i < nl.getLength(); i++) { 
             Node childNode = nl.item(i); 
               Element eElement = (Element)childNode; 

              System.out.println("Baslik= "+getTagValue("id", eElement)); 
              System.out.println("Tarih= "+getTagValue("ad", eElement)); 
              System.out.println("Link= "+getTagValue("resim", eElement)); 

           productsL.add(new ProductData(Integer.parseInt(getTagValue("id", eElement)),getTagValue("ad", eElement),getTagValue("fiyat", eElement),getTagValue("kisaca", eElement),getTagValue("resim", eElement),Integer.toString(i)));     

          } 

            return productsL; 
       } 
       } 
       catch(MalformedURLException e) 
       { 

       } 
       catch(IOException e) 
       { 

       } 
       catch(ParserConfigurationException e){ 

       } 
       catch(SAXException e) 
       { 

       } 
      return null; 
     } 
     public String getTagValue(String tag,Element eElement) 
     { 
      NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes(); 
      Node nValue = (Node) nlList.item(0); 
      return nValue.getTextContent(); 
     } 
     protected void onPostExecute(ArrayList<ProductData> result) { 

      } 

} 
} 

logcat的錯誤:

05-20 05:23:34.460: E/AndroidRuntime(5406): FATAL EXCEPTION: AsyncTask #3 
05-20 05:23:34.460: E/AndroidRuntime(5406): java.lang.RuntimeException: An error occured while executing doInBackground() 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at java.lang.Thread.run(Thread.java:1019) 
05-20 05:23:34.460: E/AndroidRuntime(5406): Caused by: java.lang.NullPointerException 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at com.Troyateck.sucukevim.ProductList$Products.getTagValue(ProductList.java:164) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at com.Troyateck.sucukevim.ProductList$Products.doInBackground(ProductList.java:136) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at com.Troyateck.sucukevim.ProductList$Products.doInBackground(ProductList.java:1) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
05-20 05:23:34.460: E/AndroidRuntime(5406):  ... 4 more 
+0

什麼是164行? – codeMagic

+0

nlist或nValue都爲null。在調用此行之前,請在getTagValue方法中:「Node nValue =(Node)nlList.item(0);」確保nlList不爲空。返回值相同nValue.getTextContent();確保nValue不爲null。 – nedaRM

回答

1

問題是與getTagValue()

public String getTagValue(String tag,Element eElement) 
{ 
    NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes(); 
    Node nValue = (Node) nlList.item(0); 
    return nValue.getTextContent(); 
} 

在那裏有一個空指針,位於第164行。我不確定哪個表達式,但是三行中的任何一行都可能導致空指針異常。請在使用前檢查每個返回值是否爲空,例如:

public String getTagValue(String tag,Element eElement) 
{ 
    String retVal = "NOT FOUND"; 
    if (eElement != null && eElement.getElementsByTagName(tag) != null && eElement.getElementsByTagName(tag).item(0) != null) 
    { 
     NodeList nlList = eElement.getElementsByTagName(tag).item(0).getChildNodes(); 
     if (nlList != null && nlList.item(0) != null) 
     { 
      Node nValue = (Node) nlList.item(0); 
      retVal = nValue.getTextContent(); 
     } 
    } 

    return retVal; 
} 
+0

這種方法解決了我的問題。非常感謝。 –