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

サーバー連携が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の値を取得
}

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です