2014-07-20 4 views
0

J'essaie de remplir listview avec json depuis l'URL. Json rafraîchissant de la page php via la base de données Mysql. Lorsque j'ajoute une nouvelle ligne ou supprime une ligne, je veux rafraîchir la liste. Maintenant, pour voir les changements, j'applique cette étapes ->Paramètres-> Application-> MyApp-> Clean Cache J'ai essayé listAdapter.notifyDataSetChanged(); mais ça ne marche pas. J'ai essayé d'appeler MainActivity avec intention, mais cela ne fonctionne pas aussi. Je ne peux pas mettre en œuvre tirer pour rafraîchir Désolé pour la mauvaise langue Kind Regards Voici mon code ->Comment actualiser MainActivity ou Listview dans Android

public class MainActivity extends Activity { 
    private static final String TAG = MainActivity.class.getSimpleName(); 
    private ListView listView; 
    private FeedListAdapter listAdapter; 
    private List<FeedItem> feedItems; 
    private String URL_FEED = "http://mehmetcantas.info/images/"; 
    public Button refreshs; 

    @SuppressLint("NewApi") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     listView = (ListView) findViewById(R.id.list); 

     refreshs = (Button) findViewById(R.id.refresh); 

     feedItems = new ArrayList<FeedItem>(); 

     listAdapter = new FeedListAdapter(this, feedItems); 
     listView.setAdapter(listAdapter); 

     // These two lines not needed, 
     // just to get the look of facebook (changing background color & hiding the icon) 
     getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#3b5998"))); 
     getActionBar().setIcon(
        new ColorDrawable(getResources().getColor(android.R.color.transparent))); 

     // We first check for cached request 
     Cache cache = AppController.getInstance().getRequestQueue().getCache(); 
     Entry entry = cache.get(URL_FEED); 
     if (entry != null) { 
      // fetch the data from cache 
      try { 
       String data = new String(entry.data, "UTF-8"); 
       try { 
        parseJsonFeed(new JSONObject(data)); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 

     } else { 
      // making fresh volley request and getting json 
      JsonObjectRequest jsonReq = new JsonObjectRequest(Method.GET, 
        URL_FEED, null, new Response.Listener<JSONObject>() { 

         @Override 
         public void onResponse(JSONObject response) { 
          VolleyLog.d(TAG, "Response: " + response.toString()); 

          if (response != null) { 
           parseJsonFeed(response); 
          } 
         } 
        }, new Response.ErrorListener() { 

         @Override 
         public void onErrorResponse(VolleyError error) { 
          VolleyLog.d(TAG, "Error: " + error.getMessage()); 
         } 
        }); 

      // Adding request to volley request queue 
      AppController.getInstance().addToRequestQueue(jsonReq); 
     } 

    } 



    /** 
    * Parsing json reponse and passing the data to feed view list adapter 
    * */ 
    private void parseJsonFeed(JSONObject response) { 
     try { 
      JSONArray feedArray = response.getJSONArray("feed"); 

      for (int i = 0; i < feedArray.length(); i++) { 
       JSONObject feedObj = (JSONObject) feedArray.get(i); 

       FeedItem item = new FeedItem(); 
       item.setId(feedObj.getInt("id")); 
       item.setName(feedObj.getString("name")); 

       // Image might be null sometimes 
       String image = feedObj.isNull("image") ? null : feedObj 
         .getString("image"); 
       item.setImge(image); 
       item.setStatus(feedObj.getString("status")); 
       item.setProfilePic(feedObj.getString("profilePic")); 
       item.setTimeStamp(feedObj.getString("timeStamp")); 

       // url might be null sometimes 
       String feedUrl = feedObj.isNull("url") ? null : feedObj 
         .getString("url"); 
       item.setUrl(feedUrl); 

       feedItems.add(item); 
      } 

      // notify data changes to list adapater 
      listAdapter.notifyDataSetChanged(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
// public void onClick(View view) { 
//  switch (view.getId()) { 
// 
// 
//  case R.id.refresh: 
//   
//    Intent intent = getIntent(); 
//    finish(); 
//    startActivity(intent); 
// 
//   break; 
//  } 
// 
// } 
// 

} 
+0

votre problème est trop vague. Vous devez vous concentrer sur la cause exacte. – VM4

+0

@ VM4 J'ai besoin de mettre à jour listview. – cantas

Répondre

0

J'ai résolu le problème mais pas efficace. Je le partage, si quelqu'un a besoin.

Je decleare un bouton reflesh et appeler l'activité en cours avec l'intention OnDestroy

public void onClick(View view) { 
     switch (view.getId()) { 
     case R.id.refresh: 
      Intent intent = getIntent(); 
      onDestroy(); 
      finish(); 
      startActivity(intent); 

      break; 
     } 

    } 

Ma méthode de OnDestroy comme celui-ci

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    try { 
     trimCache(this); 
     // Toast.makeText(this,"onDestroy " ,Toast.LENGTH_LONG).show(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 
public static void trimCache(Context context) { 
    try { 
     File dir = context.getCacheDir(); 
     if (dir != null && dir.isDirectory()) { 
      deleteDir(dir); 
     } 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 
} 

public static boolean deleteDir(File dir) { 
    if (dir != null && dir.isDirectory()) { 
     String[] children = dir.list(); 
     for (int i = 0; i < children.length; i++) { 
      boolean success = deleteDir(new File(dir, children[i])); 
      if (!success) { 
      return false; 
      } 
     } 
    } 

    // The directory is now empty so delete it 
    return dir.delete(); 
} 
0

je pense que vous devez définir l'adaptateur à nouveau chaque fois que vous apportez des modifications

donc après la suppression ou ajouter ou des modifications appelez simplement ceci:

listView.setAdapter(listAdapter); 
+0

Je l'appelle listAdapter = new FeedListAdapter (this, feedItems); listView.setAdapter (listAdapter); Où appeler à nouveau? – cantas

+0

appelez-le où vous voulez rafraîchir .... je vois que vous appelez ceci: listAdapter.notifyDataSetChanged(); si c'est l'endroit où vous voulez vous rafraîchir, appelez-le – majed

Questions connexes