2011-10-19 2 views
0

다음 코드를 참조하십시오. 다음 코드에서 버튼을 클릭 할 때 서버에서 일부 데이터를 다운로드하고 싶습니다.ListActivity를 새로 고치는 동안 adapter.notifyDataSetChanged() 문제가 발생했습니다.

public void fetch1(){ 

       event=this; 

       // TODO Auto-generated method stub 
       try { 

        Runnable runnable = new Runnable() { 
         @Override 
         public void run() { 
           handler.post(new Runnable() { 
            @Override 
            public void run() { 
             try{ 

      //dialog.show(); 


      BufferedReader in = null; 





      String url=URLManager.orderUrl+DataFactory.userData.sid+"&dnumber="+DataFactory.userData.dnumber+"&from_date="+fromDateStr+"&to_date="+toDateStr; ; 

     // String login = "morris"; 
      //String pass = "mor$ris"; 

      DefaultHttpClient client = new DefaultHttpClient(); 
      HttpGet request = new HttpGet(); 


      client.getCredentialsProvider().setCredentials(new AuthScope("newdev.objectified.com", 80), new UsernamePasswordCredentials(URLManager.user, URLManager.pass)); 

      request.setURI(new URI(url)); 
      HttpResponse response = client.execute(request); 

       in = new BufferedReader 
       (new InputStreamReader(response.getEntity().getContent())); 
       StringBuffer sb = new StringBuffer(""); 
       String line = ""; 
       String NL = System.getProperty("line.separator"); 
       while ((line = in.readLine()) != null) { 
        sb.append(line + NL); 
       } 
       in.close(); 
       String page = sb.toString(); 
       // Toast.makeText(event,url+"--::::--"+ page, Toast.LENGTH_LONG).show(); 


        OrdersHandler handler=new OrdersHandler(); 
       SAXParserFactory spf = SAXParserFactory.newInstance(); 
       SAXParser sp = spf.newSAXParser(); 
       XMLReader xr = sp.getXMLReader(); 
       xr.setContentHandler(handler); 
       InputSource is = new InputSource(); 
        is.setCharacterStream(new StringReader(page));   
        xr.parse(is); 
        Vector v=handler.getData(); 
        DataFactory.ordersVector=v; 


       dataVector=DataFactory.ordersVector; 

       ordersId=new String[dataVector.size()]; 
       for(int a=0;a<dataVector.size();a++){ 
        OrdersData o=(OrdersData)dataVector.elementAt(a); 
        ordersId[a]=o.order_id; 



       }// end of the for 


       //event.setListAdapter(new IconicAdapter()); 

      // adapter.clear(); 
       // Create an ArrayAdapter, that will actually make the Strings above 
       // appear in the ListView 






        /* 
       for(int a=0;a<v.size();a++){ 
        OrdersData o=(OrdersData)v.elementAt(a); 
        names=names+o.order_id+"\n"; 


       }// end of the for loop 

       //String data=d.sid+"\n"+d.dtitle+"\n"+d.dcountry+"\n"+d.dcity; 
        Toast.makeText(event, names, Toast.LENGTH_LONG).show(); 
        */ 


             }catch(Exception e){ 


             } 
             } 
           }); 
          } 

        }; 
        new Thread(runnable).start(); 



        //executeHttpGet(); 

       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        Toast.makeText(this, e+"", Toast.LENGTH_SHORT).show(); 
       } 
       adapter.notifyDataSetChanged(); 

       adapter.clear(); 
       adapter=new IconicAdapter(); 
       this.setListAdapter(adapter); 

      }// end of the fetch method 

위의 방법으로 데이터를 다운로드 할 때 ListActivity를 새로 고침하고 싶습니다. 이전에 널 포인터에 어댑터, 당신은 notifyDataSetChanged() 실행하고 선명()을 설정하지 않은 경우 그러나 불행하게도 응용 프로그램은 안드로이드 개발

+0

예외 오류 로그를 게시하십시오. – user370305

답변

0
adapter.notifyDataSetChanged(); 
adapter.clear(); 
adapter=new IconicAdapter(); 
this.setListAdapter(adapter); 

에 나는 새로운 오전 호야의 도움을 추락했다. 이미 생성 된 경우 새 어댑터와 setListAdapter()를 새로 작성합니다. notifyDataSetChanged() 호출은 무의미합니다 (이전 어댑터는 목록에 더 이상 표시되지 않고 새 어댑터가 표시됨). clear()는 if 당신은 약간의 청소를해야합니다.

ordersId []에 포함 된 문자열 목록을 표시하려고한다고 생각하십니까? 그러나 당신은 IconicAdapter에 그것을 전달하지 않습니다. IconicAdapter는 내부 클래스입니까?

스레드보다 선호되는 http://developer.android.com/reference/android/os/AsyncTask.html을 살펴보십시오.

+0

예 IconicAdapter는 내부 클래스이며 기본 생성자에서 ordersId []를 사용합니다. 해결 방법을 알려주는 도움말 – androider

+0

어떤 오류가 발생합니까? NullPointerException? 그렇다면 adapter.notifyDataSetChanged() 및 adapter.clear()를 제거하면 작동 할 수 있습니다. – FunkTheMonk

관련 문제