2014-07-20 3 views
0

url에서 json으로 listview를 채우려고합니다. Json은 MySQL 데이터베이스를 통해 PHP 페이지에서 새로 고침. 새 행을 추가하거나 행을 삭제할 때 목록을 새로 고침하고 싶습니다. 변경 사항을 보려면이 단계를 적용하십시오. ->Settings-> Application-> MyApp-> Clean Cache listAdapter.notifyDataSetChanged();를 시도했습니다. 그러나 일하지 않는다. 의도와 함께 MainActivity를 호출했지만이 방법도 효과가 없습니다. 내가 새로 고침 풀을 구현할 수 없습니다 죄송합니다 여기 나쁜 언어 친절 감사 내 코드에 대한 ->Android에서 MainActivity 또는 Listview를 새로 고치는 방법

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

같은 나의들의 OnDestroy 방법들의 OnDestroy

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

과 의도 현재 활동을 호출합니다. 정확한 원인을 제로에 넣어야합니다. – VM4

+0

@ VM4 listview를 업데이트해야합니다. – cantas

답변

0

문제가 해결되었지만 효율적이지 않습니다. 누구든지 필요하면 공유합니다.

은 내가 reflesh 버튼을 decleare하고 문제가 너무 모호이

@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

난 당신이 할 때마다이 삭제 한 후

을 이렇게 변경 다시 어댑터를 설정해야한다고 생각이나 추가하거나 변경하면 다음과 같이 호출됩니다.

listView.setAdapter(listAdapter); 
+0

나는 그것을 호출한다 listAdapter = 새로운 FeedListAdapter (this, feedItems); listView.setAdapter (listAdapter); 다시 전화 할 수 있습니까? – cantas

+0

새로 고침하고 싶은 곳 어디서나 호출하십시오 .... 나는 당신이 이것을 호출하고있는 것을 볼 수 있습니다 : listAdapter.notifyDataSetChanged(); 이 곳을 새로 고침하고 싶으면 여기로 전화하십시오. – majed

관련 문제