2014-12-14 2 views
2

화면의 4 개 장소 (제목, 주소, 날짜 및 이미지 소스)를 최신으로 유지해야하는이 앱이 있습니다.JSON - Android 앱과 함께 사용할 단일 파일

그렇기 때문에 응용 프로그램에서 읽을 수있는 4 가지 JSON 파일을 만들 수 있다고 생각하고 응용 프로그램을 변경하고 싶다면 내 서버에있는 JSON 파일을 변경하면됩니다.

이 (file.json) 같은 아마 뭔가 :

{"app": { 
    "title": "Screen no. 1", 
    "address": "Sesame Street", 
    "date": "01-01-2014", 
    "image": "http://myserver.com/image.jpg" 
}} 

물론 안드로이드 응용 프로그램 소스의

는 " http://myserver.com/file.json"에서 정보를 얻을 것이다 JSONParser있을 것입니다. 당신은 무엇을 생각합니까? 충분히 좋을 것이거나 더 좋은 (그리고 더 쉬운) 해결책이 있습니까? Google Endpoints에 대해 알기 위해 노력했지만 매우 복잡합니다.

EDIT1 : 나는 file.json의 값이 어떻게 든 지금 그것을 읽을 필요하므로 다운로드 할 수 발견 디버그 모드에서 How to parse JSON in Android - 그것은 "알았어 인쇄 : 나는 여기에서 JSONParser 사용자 정의 클래스를 사용하여이 지점에 도착 주소 : "하지만 값없이 :

Thread thread = new Thread(new Runnable(){ 
     @Override 
     public void run() { 
      try { 
       Log.i("ABCDE", "Start Thread"); 
       //JSON 
       JSONParser jparser = new JSONParser(); 
       JSONObject data = jparser.getJSONFromUrl("http://myserv.com/file.json");     
       Log.i("AbCDE", "Afer getting JSON"); 
       //JSONObject data = new JSONObject(myDataJson); 

       String address = ""; 

       try { 
        address = data.getString("address"); 
       } catch (JSONException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

       Log.i("ABCDE", "Got the address: " + address); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

EDIT2가 : 내 XML 갑자기 작동을 중지 (이 검증하고 잘 계층 구조 트리를 만드는,하지만 때마다) :

{ 
   "party1": { 
      "title": "Screen no. 1", 
      "address": "Sesame Street", 
      "date": "01-01-2014", 
      "image": "http://myserver.com/image.jpg", 
      "destination": "somewhere" 
   }, 
   "party2": { 
      "title": "Screen no. 2", 
      "address": "Oak Street", 
      "date": "01-01-2014", 
      "image": "http://myserver.com/image.jpg", 
      "destination": "somewhere" 
   }, 
   "party3": { 
      "title": "Screen no. 1", 
      "address": "Sesame Street", 
      "date": "01-01-2014", 
      "image": "http://myserver.com/image.jpg", 
      "destination": "somewhere" 
   }, 
   "party4": { 
      "title": "Screen no. 1", 
      "address": "Sesame Street", 
      "date": "01-01-2014", 
      "image": "http://myserver.com/image.jpg", 
      "destination": "somewhere" 
   } 
} 

JSON 검사기에서 문제가 없으며 SyntaxError : unexpected token이 표시됩니다.

이 내 JSONParser.java 클래스입니다 : (

public class JSONParser { 

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 

// constructor 
public JSONParser() {} 

public JSONObject getJSONFromUrl(String url) { 

    // Making HTTP request 
    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     json = sb.toString(); 
    } catch (Exception e) { 
     Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 

    // try parse the string to a JSON object 
    try { 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    // return JSON String 
    return jObj; 

} 

}

답변

2

예, JSON 파일로 서버에서 데이터를 획득하는 것은이 문제를 해결하는 최선의 그리고 가장 lighweight 방법이 될 것 같습니다 당신이 비록 데이터가 실제로 무엇을 의미해야하는지에 대한 약간의 데이터 제공). 당신이 그런 짓을 할 수 있습니다로

내가 구문 분석에 시간을 절단, org.json 라이브러리를 사용하는 것이 좋습니다 것입니다 : 내가 아주 좋은 생각이

String myDataJson = ... /* Obtain the data here */ 
long lastChangeTimestamp = ... /* Obtain the last saved timestamp, probably from SharedPrefs */ 

JSONObject data = new JSOBObject(myDataJson); 

long newTimestamp = data.getLong("ts"); 
if(newTimestamp > lastChangeTimestamp){ 

String title = data.getString("title"); 
String address = data.getString("address"); 
String date = data.getString("date"); 
String image = data.getString("image"); 

/* Do somtehing with the newly obtained data and save the new timestamp to SharedPrefs */ 
} 
+0

"이미지"는 서버의 이미지에 주소를 제공해야합니다.Additionaly, 나는 앱 시작시에 비교 방법을 추가하고 싶습니다. 그래서 업데이트가 없다면 아무 것도 다운로드하지 않을 것입니다. "myDataJson"은 이미 빨간색 파일입니까? –

+0

좋습니다. 위 이미지 문자열을 URL로 만들어 이미지를 다운로드하십시오. 비교에 관해서는 json의 첫 번째 값을 긴 caled "타임 스탬프"로 만들고 json이 변경 될 때마다 현재 서버 시간으로 업데이트하십시오. 그런 다음 다운로드 한 후 값이 변경되었는지 확인한 다음 데이터 만 처리하십시오. 나는 당신에게 아이디어를주기 위해 대답을 업데이트 할 것이다. – Kelevandos

+0

내 질문을 업데이트했습니다. 지금은 기본적으로 작동하도록 노력하고 있습니다. 그 후에는 타임 스탬프를 얻습니다. –

1

글쎄, 나는 GSON를 사용하는 것이 좋습니다 것입니다 도서관. 완벽한 튜토리얼 GSON 라이브러리와 here

단순히 JSON으로/자바에서 객체를 변환 할 수 있습니다와, here에서 사용할 수

! 응용 프로그램 : 이름으로 클래스를 만들어보십시오 app.java : 다음

public class app { 
public String title; 
public String address; 
public String date; 
public String image; 

public app() { 
} 

public String getTitle() { 
    return title; 
} 

public void setTitle(String title) { 
    this.title = title; 
} 

public String getAddress() { 
    return address; 
} 

public void setAddress(String address) { 
    this.address = address; 
} 

public String getDate() { 
    return date; 
} 

public void setDate(String date) { 
    this.date = date; 
} 

public String getImage() { 
    return image; 
} 

public void setImage(String image) { 
    this.image = image; 
} 


} 

GSON 라이브러리를 사용하려고, 그것은 그것이를 반환합니다 .fromJSON 기능을 사용하는 것보다 JSON 파일을 얻을 것이다 app.java의 인스턴스

여러분의 의견을 기다리십시오.

+1

감사! 일단 내가 기본 JSON을 얻었는지 확인해 보겠다 - 그냥 내가 뭘하고 있는지 알고 싶다. :) –

+0

Welcome Dear :) – BinaryMan

관련 문제