Java 异步任务中出现错误
我在Android中遇到一个关于Java 异步任务中出现错误,java,android,android-asynctask,custom-adapter,Java,Android,Android Asynctask,Custom Adapter,我在Android中遇到一个关于Asynctask的错误,我想用它通过web服务获取数据,并将它们绑定到网格视图中 public class ProductList extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ``this.requestWindowFeature(Wind
Asynctask
的错误,我想用它通过web服务获取数据,并将它们绑定到网格视图中
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) {
}
}
}
问题在于
getTagValue()
:
第164行某处有一个空指针。我不确定到底是哪个表达式,但这三行中的任何一行都可能导致空指针异常。请在使用前检查每个返回值是否为null,可能如下所示:
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;
}
nlist或nValue均为空。在调用此行之前,在getTagValue方法中:“Node nValue=(Node)nlList.item(0);”确保nlList不为null。return nValue.getTextContent()相同;确保nValue不为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();
}
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;
}