検索プログラマのメモ帳

壁にぶつかったら検索で調べるプログラマのちょっと遅れたメモ帳。たまに自分で挑戦する。

Skip to: Content | Sidebar | Footer

サーバー連携:jsonの受取り。get、post

22 10月, 2012 (09:39) | android開発 | By: admin

サーバー連携がandoroidでできるようになるアプリの幅も広がる。まずはjsonの受取り。get、postの片方ができればいい。

スマホから情報を渡して、それに対応する情報をサーバーがjson形式で返し、それをスマホで処理して表示する。

androidos3.0からメインスレッドでのネットワーク処理は「NetworkOnMainThreadException」で強制終了させられるようになったので、「AsyncTask」か4.0なら「AsyncTaskLoader」を使うということになると思う。
「AsyncTask」利用:android.os.NetworkOnMainThreadExceptionエラーへの対応方法
1.サーバーアクセス用のクラス作成。post、getどちらでもいい。

public class UrlConn {

public static String postJsonData(String sUrl, ArrayList<NameValuePair> params) {
HttpClient objHttp = new DefaultHttpClient();
String sReturn = “”;
try {
HttpPost httpPost = new HttpPost(sUrl);
httpPost.setEntity(new UrlEncodedFormEntity(params, “UTF-8”));

if(flg_ret){
HttpResponse objResponse = objHttp.execute(httpPost);

if (objResponse.getStatusLine().getStatusCode() < 400){
InputStream objStream = objResponse.getEntity().getContent();
InputStreamReader objReader = new InputStreamReader(objStream);
BufferedReader objBuf = new BufferedReader(objReader);
StringBuilder objJson = new StringBuilder();
String sLine;
while((sLine = objBuf.readLine()) != null){
objJson.append(sLine);
}
sReturn = objJson.toString();
objStream.close();
}
}else{
objHttp.execute(httpPost);
return null;
}
} catch (IOException e) {
return null;
}
return sReturn;
}
public static String getData(String sUrl) {
HttpClient objHttp = new DefaultHttpClient();
HttpParams params = objHttp.getParams();
HttpConnectionParams.setConnectionTimeout(params, 1000); //接続のタイムアウト
HttpConnectionParams.setSoTimeout(params, 1000); //データ取得のタイムアウト
String sReturn = “”;
try {

HttpGet objGet = new HttpGet(sUrl);
HttpResponse objResponse = objHttp.execute(objGet);
if (objResponse.getStatusLine().getStatusCode() < 400){
InputStream objStream = objResponse.getEntity().getContent();

InputStreamReader objReader = new InputStreamReader(objStream);
BufferedReader objBuf = new BufferedReader(objReader);
StringBuilder objJson = new StringBuilder();
String sLine;
while((sLine = objBuf.readLine()) != null){
objJson.append(sLine);
}
sReturn = objJson.toString();
objStream.close();
}
} catch (IOException e) {
return null;
}
return sReturn;
}
}

2.サーバーに渡す情報を作成。UrlConnという自作クラスのpostJsonDataを呼び出し実行する。面倒だったのstaticメソッドにした。

params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(“level”, level));
params.add(new BasicNameValuePair(“user_id”, user_id));
String json =  UrlConn.postJsonData(url, params);

3.jsonデータの処理

JSONObject rootObject = new JSONObject(json);
JSONArray itemArray = rootObject.getJSONArray(“root”);//要素rootから始める
JSONObject jsonObject;
quizList = new ArrayList<String>();
for (int i = 0; i < itemArray.length(); i++) {
jsonObject = itemArray.getJSONObject(i);
quizList.add(jsonObject.getString(“jp”));//要素rootの中をチェックして、jpの値を取得
}

 

Write a comment