2012-02-28 13 views
0

私はアンドロイドで長いコードを書いており、レストランのリストがリストビューに読み込まれると進捗ダイアログが表示されます。今問題は、レストランのリストがユーザーに再度読み込まれたときの作業の罰金が、初めての変更だけです。リストビューにデータが入力されていても、ユーザーは手動でリストを閉じるボタンを押すだけで表示されます。私はこの場合pg.dismiss()を書く場所を教えていません。ここに自分のコードを投稿する。 plzは私に助言します..進捗ダイアログが表示され続ける

package com.Refinedymapps; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.StringReader; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.location.Geocoder; 
import android.location.LocationManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.ImageButton; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.Toast; 

public class Restaurantlist extends Activity implements OnClickListener, OnItemSelectedListener { 
    ProgressDialog pg; 
    private ImageButton imgbtn; 
    private ListView restaurant; 
    private TextView city; 
    String sendid,flagdopost="",linkurl; 
    LocationManager locationManger; 
    Geocoder gc; 
    Bundle bundle; 
    private int j=0; 
    private Spinner cuisine,area; 
    static ArrayList<HashMap<String,String>> customlist= new ArrayList<HashMap<String,String>>(); 
    private String asynctaskflag="",cuisineval,areaval; 
    List<String> tempareanamelist,tempcuisinenamelist,areanamelist,cuisinelist,cuisineidlist,restaurantnames,areanames,restaurantidlist,originalcuisinelist,originalarealist; 
    String str,coun,stat,cid,sid,cityid,cityname; 



    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.restaurantlisting); 
      linkurl=getResources().getString(R.string.linkurl); 
      city=(TextView)findViewById(R.id.textviewcity); 
      cuisine=(Spinner)findViewById(R.id.spncuisine); 
      area=(Spinner)findViewById(R.id.spnarea); 
      restaurant=(ListView)findViewById(R.id.lstrestaurant); 
      imgbtn=(ImageButton)findViewById(R.id.imageButton1);    

      bundle = this.getIntent().getExtras(); 
      imgbtn.setImageResource(R.drawable.searchloc); 
      asynctaskflag="init"; 
      new Thetask().execute(asynctaskflag,null,null);     

      imgbtn.setOnClickListener(new OnClickListener(){ 
       public void onClick(View arg0) { 
        Intent newlocintent=new Intent(Restaurantlist.this,Restaurantlistdisplay.class); 
        startActivity(newlocintent); 

        }    
      });    
      restaurant.setOnItemClickListener(new OnItemClickListener(){     
       public void onItemClick(AdapterView<?> arg0, View arg1, 
         int arg2, long arg3) { 
         Toast.makeText(getBaseContext(), "resname"+restaurantnames.get(arg2)+"areaname"+areanames.get(arg2), 10).show(); 
         String[] getid={"itemclick",restaurantnames.get(arg2),areanames.get(arg2)}; 
         new Thetask().execute(getid);          
       } 
      }); 
    } 

    public void populateReslist() 
    { 
     Log.i("inside populatereslist","value of j is:"+j); 
     for(int i=0;i<restaurantnames.size();i++) 
     { 
      HashMap<String,String> temp = new HashMap<String,String>(); 
      temp.put("Restaurant Name",restaurantnames.get(i).toString()); 
      temp.put("Area Name", areanames.get(i).toString()); 
      customlist.add(temp); 
     } 
    } 

    public List<String> getAreanames(String cityid) 
     { 

      String list = null; 
      areanamelist=new ArrayList<String>(); 

      final HttpClient client=new DefaultHttpClient(); 

      final HttpGet req=new HttpGet(linkurl+"/ymaws/resources/restaurant/"+cityid+"/areas/"); 
      HttpResponse httpResponse; 
      try { 
        httpResponse=client.execute(req); 
        HttpEntity entity = httpResponse.getEntity(); 
        Log.i("entity", entity.toString()); 
        if (entity != null) 
        { 

         InputStream instream = entity.getContent(); 
         BufferedReader reader = new BufferedReader(new InputStreamReader(instream)); 
         StringBuilder sb = new StringBuilder(); 

         String line = null; 
         try 
         { 
          while ((line = reader.readLine()) != null) 
          { 
           sb.append(line + "\n"); 
          } 
         } 
         catch (IOException e) 
         { 
          e.printStackTrace(); 
         } 
         finally 
         { 
          try 
          { 
           instream.close(); 
          } 
          catch (IOException e) 
          { 
           e.printStackTrace(); 
          } 
         } 

         // Closing the input stream will trigger connection release 
         list= sb.toString(); 
         Log.i("areaname xml is", list.toString()); 
        } 
      } 
      catch(Exception e) 
      { 

      } 

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      try 
      { 
       DocumentBuilder builder = factory.newDocumentBuilder(); 
       Document dom = builder.parse(new InputSource(new StringReader(list))); 
       Element root = dom.getDocumentElement(); 
       NodeList items = root.getElementsByTagName("Area"); 
       for (int i=0;i<items.getLength();i++) 
       { 
        Node item = items.item(i); 
        NodeList properties = item.getChildNodes(); 
        for (int j=0;j<properties.getLength();j++) 
        { 
         Node property = properties.item(j); 
         String name = property.getNodeName(); 
         if (name.equalsIgnoreCase("areaName")) 
         { 
          areanamelist.add(property.getFirstChild().getNodeValue()); 
         }      
         else 
         { 

         }     
        } 
       } 
       //Log.i("areaname list in getAreas method", areanamelist.toString()); 
       return areanamelist;   
      } 
      catch (Exception e) 
      { 
       throw new RuntimeException(e); 
      } 
     } 

    public List<String> getCuisines(String cityid) 
    { 

      String list = null; 
      cuisinelist=new ArrayList<String>(); 
      cuisineidlist=new ArrayList<String>(); 
      final HttpClient client=new DefaultHttpClient();    
      final HttpGet req=new HttpGet(linkurl+"/ymaws/resources/restaurant/"+cityid+"/cuisines/"); 
      HttpResponse httpResponse; 
      try { 
        httpResponse=client.execute(req); 
        HttpEntity entity = httpResponse.getEntity(); 
        Log.i("entity", entity.toString()); 
        if (entity != null) 
        { 

         InputStream instream = entity.getContent(); 
         BufferedReader reader = new BufferedReader(new InputStreamReader(instream)); 
         StringBuilder sb = new StringBuilder(); 

         String line = null; 
         try 
         { 
          while ((line = reader.readLine()) != null) 
          { 
           sb.append(line + "\n"); 
          } 
         } 
         catch (IOException e) 
         { 
          e.printStackTrace(); 
         } 
         finally 
         { 
          try 
          { 
           instream.close(); 
          } 
          catch (IOException e) 
          { 
           e.printStackTrace(); 
          } 
         } 

         // Closing the input stream will trigger connection release 
         list= sb.toString(); 
         Log.i("cuisinename xml is", list.toString()); 
        } 
      } 
      catch(Exception e) 
      { 

      } 

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      try 
      { 
       DocumentBuilder builder = factory.newDocumentBuilder(); 
       Document dom = builder.parse(new InputSource(new StringReader(list))); 
       Element root = dom.getDocumentElement(); 
       NodeList items = root.getElementsByTagName("Cuisine"); 
       for (int i=0;i<items.getLength();i++) 
       { 
        Node item = items.item(i); 
        NodeList properties = item.getChildNodes(); 
        for (int j=0;j<properties.getLength();j++) 
        { 
         Node property = properties.item(j); 
         String name = property.getNodeName(); 
         if (name.equalsIgnoreCase("cuisineName")) 
         { 
          cuisinelist.add(property.getFirstChild().getNodeValue()); 
         }      
         else if(name.equalsIgnoreCase("cuisineId")) 
         { 
          cuisineidlist.add(property.getFirstChild().getNodeValue()); 
         }     
        } 
       } 
       Log.i("getcuisine cuisinelist",cuisinelist.toString()); 
       return cuisinelist;   
      } 
      catch (Exception e) 
      { 
       throw new RuntimeException(e); 
      } 

    } 

    public void firequery() 
     { 
      String url = null; 
      if(cuisineval=="*" && areaval=="*") 
      { 
       url=linkurl+"/ymaws/resources/restaurant/"+cityid+"/restaurants";       
      } 
      else if(cuisineval!="*" && areaval=="*") 
      { 

       for(int i=0;i<originalcuisinelist.size();i++) 
       { 

        Log.i("cuisinelist original item is",""+originalcuisinelist.get(i)); 
        Log.i("cuisineidlist is",cuisineidlist.toString()); 

        if((cuisine.getSelectedItem().toString()).equalsIgnoreCase(originalcuisinelist.get(i).toString())) 
        {      
         Log.i("cuisineid selected is",""+cuisineidlist.get(i)); 
         url=linkurl+"/ymaws/resources/restaurant?cityid="+cityid+"&cuisineid="+cuisineidlist.get(i); 
        } 
       }  
      } 
      else if(cuisineval=="*" && areaval!="*") 
      { 

          url = linkurl+"/ymaws/resources/restaurant?cityid="+cityid+"&areanm="+area.getSelectedItem().toString(); 


      } 
      else 
      { 
       for(int i=0;i<originalcuisinelist.size();i++) 
       {    
        if((cuisine.getSelectedItem().toString()).equalsIgnoreCase(originalcuisinelist.get(i).toString())) 
        {    
         url=linkurl+"/ymaws/resources/restaurant?cityid="+cityid+"&cuisineid="+cuisineidlist.get(i)+"&areanm="+area.getSelectedItem().toString(); 
        } 
       }     
      } 
      getResult(url); 

     } 

    public void getResult(String url) 
    { 
      String list = null; 
      restaurantnames=new ArrayList<String>(); 
      areanames=new ArrayList<String>(); 
      restaurantidlist=new ArrayList<String>(); 
         final HttpClient client=new DefaultHttpClient(); 
      Log.i("url is","url:"+url.toString()); 
      final HttpGet req=new HttpGet(url.replaceAll(" ", "%20")); 
      HttpResponse httpResponse; 
      try { 
        httpResponse=client.execute(req); 
        HttpEntity entity = httpResponse.getEntity(); 
        Log.i("entity", entity.toString()); 
        if (entity != null) 
        { 

         InputStream instream = entity.getContent(); 
         BufferedReader reader = new BufferedReader(new InputStreamReader(instream)); 
         StringBuilder sb = new StringBuilder(); 
         String line = null; 
         try 
         { 
          while ((line = reader.readLine()) != null) 
          { 
           sb.append(line + "\n"); 
          } 
         } 
         catch (IOException e) 
         { 
          e.printStackTrace(); 
         } 
         finally 
         { 
          try 
          { 
           instream.close(); 
          } 
          catch (IOException e) 
          { 
           e.printStackTrace(); 
          } 
         }      
         list= sb.toString(); 
         Log.i("list xml is", list.toString()); 
        } 
      } 
      catch(Exception e) 
      { 

      } 
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
      factory.setNamespaceAware(true); 
      try 
      { 
       if(list!=null) 
       { 
       DocumentBuilder builder = factory.newDocumentBuilder(); 
       Document dom = builder.parse(new InputSource(new StringReader(list))); 
       Element root = dom.getDocumentElement(); 
       NodeList items = root.getElementsByTagName("resLovData"); 
       for (int i=0;i<items.getLength();i++) 
       { 
        Node item = items.item(i); 
        NodeList properties = item.getChildNodes(); 
        for (int j=0;j<properties.getLength();j++) 
        { 
         Node property = properties.item(j); 
         String name = property.getNodeName(); 
         if (name.equalsIgnoreCase("locName")) 
         { 
          restaurantnames.add(property.getFirstChild().getNodeValue()); 
         }      
         else if(name.equalsIgnoreCase("areaName")) 
         { 
          areanames.add(property.getFirstChild().getNodeValue()); 
         } 
         else if(name.equalsIgnoreCase("locId")) 
         { 
          restaurantidlist.add(property.getFirstChild().getNodeValue()); 
         } 

        } 
       } 
       } 
       else 
       { 

       } 
      } 
      catch (Exception e) 
      { 
       throw new RuntimeException(e); 
      } 
    } 

    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 

    } 

    public class Thetask extends AsyncTask<String, Void, Void> 
    {  

     String x,y;   
     @Override 
     public void onPreExecute() 
     { 
      pg =new ProgressDialog(Restaurantlist.this); 
      pg.setMessage("fetching info...."); 
      pg.setIndeterminate(true); 
      pg.setCancelable(true); 
      Log.i("inside preexecute","in pre execute"); 
      pg.show();   
     } 

     public Void doInBackground(String... params) 
     {   
      if(params[0].equalsIgnoreCase("init")) 
      { 
       Log.i("inside doinbackground 1st",flagdopost); 
       cid=bundle.getString("cid"); 
       sid=bundle.getString("sid"); 
       cityid=bundle.getString("cityid");    
       cityname=bundle.getString("cityname"); 
       originalcuisinelist=new ArrayList<String>(); 
       originalcuisinelist=getCuisines(cityid); 

       tempcuisinenamelist = getCuisines(cityid); 
       tempcuisinenamelist.add(0,"All"); 

       originalarealist=new ArrayList<String>(); 
       originalarealist=getAreanames(cityid); 
       tempareanamelist=getAreanames(cityid); 
       tempareanamelist.add(0,"All"); 
       Log.i("area are",tempareanamelist.toString()); 

       flagdopost="init"; 
       Log.i("inside doinbackground 1st",flagdopost); 
      }   
      else if(params[0].equalsIgnoreCase("")) 
      { 
       flagdopost=""; 
       j++; 
       if(j!=1) 
       { 
        firequery();   
        flagdopost="itemselected"; 
        Log.i("inside doinbackground 2nd",flagdopost); 
       } 
      }   
      else if(params[0].equalsIgnoreCase("itemclick")) 
      { 
       x=params[1]; 
       y=params[2]; 
       for(int i=0;i<restaurantidlist.size();i++) 
       { 
        if((params[1].toString()).equalsIgnoreCase(restaurantnames.get(i))) 
        { 
         sendid=restaurantidlist.get(i); 

        } 
       } 

       Log.i("in do in backgroung idforbundle is", sendid); 
       flagdopost="itemclicked"; 
      } 
      return null;      
     } 

     public void onPostExecute(Void result) 
     {  
      if(flagdopost.equalsIgnoreCase("init")) 
      { 
       city.setText(cityname);        
       ArrayAdapter<String> adaptercuisine=new ArrayAdapter<String>(Restaurantlist.this,android.R.layout.simple_spinner_item,tempcuisinenamelist); 
       adaptercuisine.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

       ArrayAdapter<String> adapterarea=new ArrayAdapter<String>(Restaurantlist.this,android.R.layout.simple_spinner_item,tempareanamelist); 
       adapterarea.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

       area.setAdapter(adapterarea); 
       area.setSelection(0); 

       cuisine.setAdapter(adaptercuisine); 
       cuisine.setSelection(0); 

       area.setOnItemSelectedListener(Restaurantlist.this); 
       cuisine.setOnItemSelectedListener(Restaurantlist.this); 
      } 
      else if(flagdopost.equalsIgnoreCase("itemselected")) 
      { 

       customlist.clear(); 
       populateReslist(); 
       restaurant.invalidateViews(); 
       restaurant.setAdapter(new SimpleAdapter(Restaurantlist.this,customlist,R.layout.customlistrow,new String[] {"Restaurant Name","Area Name"}, 
       new int[] {R.id.tvresname,R.id.tvareaname}) 
       { 
        @Override  
        public View getView(int position, View convertView,ViewGroup parent) 
        {             
         View view =super.getView(position, convertView, parent); 
         return view;      
        } 
       });  

      } 
      else if(flagdopost.equalsIgnoreCase("itemclicked")) 
      {    
       Bundle bundle=new Bundle(); 
       bundle.putString("locid",sendid); 

       Toast.makeText(getBaseContext(), "locId in dopost new one"+sendid, 10).show(); 
       Intent resdetail = new Intent(Restaurantlist.this,Restaurantdetail.class); 
       resdetail.putExtras(bundle); 
       startActivity(resdetail);    
      }    
      pg.dismiss(); 
     } 

    } 

    public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) 
    { 
     switch(arg0.getId()) 
     { 
      case R.id.spncuisine: 

            asynctaskflag=""; 
            if(cuisine.getSelectedItem().toString()!="All") 
            { 
             cuisineval=cuisine.getSelectedItem().toString(); 
            } 
            else 
            { 
             cuisineval="*"; 
            } 

            new Thetask().execute(asynctaskflag,null,null); 

            break; 

      case R.id.spnarea:       
            asynctaskflag=""; 
            if(area.getSelectedItem().toString()!="All") 
            { 
             areaval=area.getSelectedItem().toString(); 
            } 
            else 
            { 
             areaval="*"; 
            } 
            new Thetask().execute(asynctaskflag,null,null); 
            break; 
     } 


    } 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 

    } 

} 
+0

if can not answer plz dont downvote plz。そして、あなたが私の問題を明確にしようとする私に尋ねる理解していない場合 – samir

答えて

1

AsyncTask内でProgressDialogを宣言してみてください。アクティビティメンバ変数としてではなく。

public class Thetask extends AsyncTask<String, Void, Void> 
{ 
    ProgressDialog pg = null; 
    String x,y;   
    @Override 
    public void onPreExecute() 
    ... 
+0

ちょっとありがとうございます。 uロックマン。本当にありがとうur help.its今働いています。ありがとう、ありがとう、ありがとう:-) – samir

+0

ねこクノッソス。 Plz投票私の仲間は必死に20にする必要があります。 – samir

関連する問題