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
什麼是164行? – codeMagic
nlist或nValue都爲null。在調用此行之前,請在getTagValue方法中:「Node nValue =(Node)nlList.item(0);」確保nlList不爲空。返回值相同nValue.getTextContent();確保nValue不爲null。 – nedaRM