마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

json질문 드립니다.

0 추천

mysql과 안드로이드 데이터 I/O과정에서 jsp/JSON을 공부하고 있습니다.
그런데
string strid = joUser.get("id").tosting();은 스트링형으로 변환인데
int hashcode = Integer.parseInt(joUser.get("hashcode").tosting()); 스트링으로 받아서 다시 인트로 파싱하는 이유가 무엇입니까?
int hashcode = joUser.get("hashcode").getInt(); 처럼 인티져로 바로 받으면 안 되는 건가요?

 

참고로 hash값은 안드로이드 sql둘다 숫자로 들어가고 있습니다.

 

밑에는 예제 소스입니다.

Export.java

	private boolean exportDb()
	{

		String strUrl = strServerIp + "vbns_export.jsp";

		ArrayList<String> arraylistVbns = new ArrayList<String>();

		VBNSDbHandler dbhandler = VBNSDbHandler.open(VBNSBackup.this);

		dbhandler.selectAll(arraylistVbns);

		dbhandler.close();

		JSONObject joInput = new JSONObject();

		try {

			joInput.put("memberid", strMemberId);

			JSONArray jaDb = new JSONArray();

			for(int i=0; i < arraylistVbns.size(); i++)
			{
				JSONObject joData = new JSONObject();

				String[] strMsg = arraylistVbns.get(i).split(";");
				int hashcode = Integer.valueOf(strMsg[0]);
				int second = Integer.valueOf(strMsg[1]);
				String strMemo = strMsg[2];

				joData.put("hashcode", hashcode);
				joData.put("second", second);
				joData.put("memo", strMemo);

				jaDb.put(joData);
			}

			joInput.put("data", jaDb);						

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

		HttpClient client = new DefaultHttpClient();

		HttpPost post=new HttpPost(strUrl);

		ArrayList<BasicNameValuePair> name=new ArrayList<BasicNameValuePair>();

		name.add(new BasicNameValuePair("inputdata", joInput.toString()));					

		UrlEncodedFormEntity entity = null;
		try {
			entity = new UrlEncodedFormEntity(name, HTTP.UTF_8);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		post.setEntity(entity);

		HttpResponse responsePOST = null;

		try {
			responsePOST = client.execute(post);
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		if(responsePOST.getStatusLine().getStatusCode()==200)						
			return true;		
		else					
			return false;		

	}	
}

--------------------------

export.jsp

	if(strReq == null)
		out.print("잘못된 접근입니다");
	else
	{
		String url="jdbc:mysql://localhost/vbns";

		Class.forName("com.mysql.jdbc.Driver");
		
		Connection conn=DriverManager.getConnection(url,"root","kwcvbns");

		Statement stmt=conn.createStatement();
		
		String SQL = null;

		JSONObject joReq = (JSONObject)JSONValue.parse(strReq);
	
		String strMemberId =  joReq.get("memberid").toString();

                SQL = "UPDATE member SET backup = 1 WHERE id = '" + strMemberId + "';";

		stmt.executeUpdate(SQL);

		SQL = "DELETE FROM backup WHERE memberid = '" + strMemberId + "';";

		stmt.executeUpdate(SQL);

		JSONArray jaData = (JSONArray)joReq.get("data");

		 for(int i=0; i < jaData.size(); i++)
		{

			JSONObject joValue = (JSONObject)jaData.get(i);
			
			int hashcode = Integer.valueOf(joValue.get("hashcode").toString());
			
			int second = Integer.valueOf(joValue.get("second").toString());
			
			String strMemo = joValue.get("memo").toString();

			SQL = "INSERT INTO backup VALUES(" + hashcode + ", " + second + ", '" + strMemo + "', '" + strMemberId + "');";
	
			stmt.executeUpdate(SQL);			

		}
		stmt.close();

		conn.close();
		
	}

 

hacker2083 (220 포인트) 님이 2013년 10월 14일 질문

1개의 답변

0 추천
원소스 한줄한줄에서 의미를 찾으실 필요는 없을것 같아요. 그냥 원소스 작성자가 작성 시점에서 getInt 를 모르는거 같습니다. 더 생각없이 무조건 모든 자료를 문자열로 취급해서 작성하면, json 을 다룰때 문자열 가지고 와서 가공하는 같은 패턴의 반복이니까요.

혹시 과거에 지원되지 않던 api가 싶었는데, getInt 의 경우 jdk 1.3 시절에도 존재했던 함수입니다. 이 함수는 json 의 자료 타입이 문자열이든 숫자열이든 상관없이 파싱해서 값을 반환하기 때문에 원하시는 용도로 적당해 보입니다.
상인 (6,670 포인트) 님이 2013년 10월 14일 답변
혹시나 해서
 int hashcode = Integer.valueOf(joValue.get("hashcode").toString());부분을
int hashcode = joValue.get("hashcode").toInt();로 바꿨더니 실패하더군요 ㅎ
java에서
name.add(new BasicNameValuePair("inputdata", joInput.toString()));
으로 오브젝트를 넘겨주었기 때문에 일단
jsp에서도 toString로 받은 후에 int로 다시 파싱하는 것 같다는 것 밖에 유추를 못하겠네요

공부가 부족해서인지...
JSONObject 의 소스를 보십시오.
...