2014-11-07 2 views
0

프로젝트에서 발리를 사용하여 인터넷의 데이터를 구문 분석합니다. 나는 성공적으로 데이터를 캐시하고 거기에서 데이터를 검색 할 수 및 캐시를 사용할 수없는 경우 다음 코드에 의해 네트워크 분석 :발리를 사용하여 새 데이터 만 사용할 수있는 경우 네트워크에서로드하는 방법

Cache cache = GlobalData.getInstance().getRequestQueue().getCache(); 
     Entry entry = cache 
       .get("http://10.10.10.22/emaildata/getcurrentuser.php"); 
     if (entry != null) { 
      try { 
       String data = new String(entry.data, "UTF-8"); 
       JSONArray array = new JSONArray(data); 
       setParsedValue(array); 


      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } else { 


      JsonArrayRequest jArrayRequest = new JsonArrayRequest(
        "http://10.10.10.22/emaildata/getcurrentuser.php", 
        new Response.Listener<JSONArray>() { 

         @Override 
         public void onResponse(JSONArray array) { 

          setParsedValue(array); 

         } 
        }, new Response.ErrorListener() { 

         @Override 
         public void onErrorResponse(VolleyError error) { 
          // TODO Auto-generated method stub 
          Toast.makeText(getApplicationContext(), 
            error.getMessage(), Toast.LENGTH_LONG) 
            .show(); 

         } 
        }); 

      GlobalData.getInstance().addToRequestQueue(jArrayRequest); 

     } 

가 지금은 데이터가 항상 새로운 데이터까지 캐시에서로드 것이라고합니다 지금까지 내가했던 onPause();

@Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     GlobalData 
       .getInstance() 
       .getRequestQueue() 
       .getCache() 
       .invalidate("http://10.10.10.22/emaildata/getcurrentuser.php", 
         true); 
    } 

때로는 작동하지만 때로는 일을 나던에 다음과 같은, 즉 네트워크 URL을 볼 수 있습니다 내 장치를 다시 시작하기 위해 내가 가진 대부분의 시간은 새로운 데이터 위치에 대한 awared하세요 나는 대신에 네트워크에서 파싱하거나 cac에서로드하는 데이터 변경을 즉시 얻을 수있는 방법을 원하고 있습니다. 그렇지 않으면?

답변

-1

로컬 캐시 대신 항상 서버에서 새로운 데이터를 얻으려면 URL 호출에 현재 시간 소인을 추가 할 수 있습니다. 이렇게하면 Volley가 전달한 URL을 고유하게 취급하므로 서버에 요청할 것입니다.

int time = (int) (System.currentTimeMillis()); 
JsonArrayRequest jArrayRequest = new JsonArrayRequest(
       "http://10.10.10.22/emaildata/getcurrentuser.php?time" 
+0

plz 신중하게 내 질문을 읽어보십시오. – Reyjohn

0

나는 프로젝트에서 오전 발리를 사용하여 인터넷에서 데이터를 분석 할 수 있습니다.

가 지금은 그 데이터가 항상 것입니다 원하는 ...

: 나는 성공적으로 데이터를 캐시 및 캐시를 사용할 수없는 경우 다음 코드에 의해 네트워크에서 구문 분석 거기 에서 데이터를 검색 할 수 있습니다 새로운 데이터까지 캐시에서로드

은 사람이 즉시 데이터가 변경 그렇지 않으면 캐시에서 네트워크 또는 부하에서 구문 분석에 도착하는 방법을 도울 수 ... 해당 네트워크 URL

에 사용할 수 있습니까?

선량처럼 모든 필드를 가지고 있지 예를 들어 자동으로 한 서버 응답이 허용으로 위의 작업을 모두 발리 용량 : 응답을 저장하지 복용량 발리의 원인이

Cache-Control:no-cache|no-store 

.

당신이해야 할 일은 요청하는 것뿐입니다. 그것이 자신의 캐시에 있고 그것이 유효하면 (max-age 또는 ttl 또는 ... ok), 유효 기간이 만료되었거나 더 이상 유효하지 않으면 새로운 요청을 생성합니다.

+0

요청을하고 데이터를로드 한 다음 다시 누르면 내 앱에서 빠져 나옵니다. 그런 다음 내 앱에 새로운 변경 사항을 다시 입력하면 내 URL json을 변경했습니다. 업데이트되지 않았습니다. 강제로 앱을 중지하거나 기기를 다시 시작하면 데이터 업데이트가 수신됩니다. 하지만 나는 데이터를 변경 한 후에 앱을 처음 실행할 때처럼 앱에서 데이터를 업데이트해야한다고 생각한다. 'onResume()'에 – Reyjohn

+0

이 새로운 발리 요청을 생성합니다. listview 또는 notifyDataSetChanged()와 같은 위젯을 업데이트하는 방법을 알려주세요. – mmlooloo

+0

나에게 예제를 줄 수 있습니까? 난 그 해결책을 원해. – Reyjohn

관련 문제