2012-08-17 4 views
1

J'ai un chargement sans fin et ma grille n'apparaît pas. Mon adresse Web xml fonctionne et tout va bien. Y a-t-il un problème avec mes codes? J'ai juste modifié quelques codes, essayant d'apprendre Asynctask ici. S'il vous plaît aidez-moiAndroid boucle sans fin Progress Dialog AsyncTask

CustomizedListView.class

public class CustomizedListView extends Activity { 
     // All static variables 
     private ProgressDialog pDialog; 
     static final String URL = "http://XXXXXX"; 
     // XML node keys 
     ArrayList<HashMap<String, String>> songsList; 
     static final String KEY_SONG = "song"; // parent node 
     static final String KEY_ID = "id"; 
     static final String KEY_TITLE = "title"; 
     static final String KEY_ARTIST = "artist"; 
     static final String KEY_DURATION = "duration"; 
     static final String KEY_THUMB_URL = "thumb_url"; 
     static String IMAGE_POSITION; 
     GridView grid; 
     LazyAdapter adapter; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.grid_layout); 
      //StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

      //StrictMode.setThreadPolicy(policy); 

      songsList = new ArrayList<HashMap<String, String>>(); 

      new loadGridView().execute(); 


      grid = (GridView) findViewById(R.id.grid_view); 
      grid.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
        String title = ((TextView) view.findViewById(R.id.title)).getText().toString(); 
        String artist = ((TextView) view.findViewById(R.id.artist)).getText().toString(); 
        String url = ((TextView) view.findViewById(R.id.duration)).getText().toString(); 
        // Starting new intent 
        Intent in = new Intent(getApplicationContext(),SingleMenuItemActivity.class); 
        in.getIntExtra(IMAGE_POSITION, position); 
        in.putExtra(KEY_TITLE, title); 
        in.putExtra(KEY_ARTIST, artist); 
        in.putExtra(KEY_THUMB_URL,url); 
        startActivity(in);  

       } 
      }); 
     } 

     class loadGridView extends AsyncTask<String, String, String> { 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       pDialog = new ProgressDialog(
         CustomizedListView.this); 
       pDialog.setMessage("Loading websites ..."); 
       pDialog.setIndeterminate(false); 
       pDialog.setCancelable(false); 
       pDialog.show(); 
      } 

      @Override 
      protected String doInBackground(String... args) { 
       // updating UI from Background Thread 


         XMLParser parser = new XMLParser(); 
         String xml = parser.getXmlFromUrl(URL); // getting XML from URL 
         Document doc = parser.getDomElement(xml); // getting DOM element 

         NodeList nl = doc.getElementsByTagName(KEY_SONG); 
         // looping through all song nodes <song> 
         for (int i = 0; i < nl.getLength(); i++) { 
          // creating new HashMap 
          HashMap<String, String> map = new HashMap<String, String>(); 
          Element e = (Element) nl.item(i); 
          // adding each child node to HashMap key => value 
          map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
          map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); 
          map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST)); 
          map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION)); 
          map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL)); 

          // adding HashList to ArrayList 
          songsList.add(map); 
         } 


         return null; 

        } 
@Override 
        protected void onPostExecute(String args) { 
       // dismiss the dialog after getting all products 
       adapter=new LazyAdapter(CustomizedListView.this, songsList);   
       grid.setAdapter(adapter); 
       pDialog.dismiss(); 
      } 


      } 

     } 

Répondre

1

Vous devez utiliser

adaptateur = new LazyAdapter (Activityname.this, songsList);

Vous n'utilisez pas du tout les fonctionnalités de doInbackground. Puisque vous appelez encore runOnuithread. Retirez-le.

Déplacer l'adaptateur appel en rapport avec fil Ui peut être OnpostExecute

+0

faisait ça et j'ai toujours que android.os.NetworkOnMainThreadException. Je ne veux pas utiliser StrictMode.setThreadPolicy (policy); –

+0

Vérifiez la modification. – nandeesh

+0

J'ai une boîte de dialogue de progression de chargement sans fin et ma grille n'apparaît pas. Je l'ai modifié mes codes en fonction de votre conseiller –

0

Utilisez un contexte

public LazyAdapter(Context context, ArrayList<HashMap<String, String>> d) { 
     context = context; 
     data=d; 
     inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader=new ImageLoader(context.getApplicationContext()); 
    } 

et mettre référence à votre contexte AsyncTask Constructor. Je suppose que le meilleur endroit pour remplir votre adaptateur dans la méthode

void onPostExecute(String args) { 
// fill your adapter here 
     } 

au lieu doInBackground();

+0

Yahor10, pouvez-vous m'aider avec ça. Ma boîte de dialogue de progression ne s'arrête jamais et ma grille n'apparaît pas. –