Androidアプリにおける非同期のHTTP通信
今回は,Androidアプリにおける非同期のHTTP通信を行うコードを載せます.
私は,今(2014/08)からAndroidアプリを作ろうと思ったので,違和感がなかったのですが.
非同期を行わなければならない仕様になったそうです.
仕様が変わるのはめんどくさいですね.
そんなことはさておき,以下に私が書いたコードを載せます.
AsyncHttpRequest.javaのソースコード
私は,今(2014/08)からAndroidアプリを作ろうと思ったので,違和感がなかったのですが.
非同期を行わなければならない仕様になったそうです.
仕様が変わるのはめんどくさいですね.
そんなことはさておき,以下に私が書いたコードを載せます.
import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; public class MainActivity extends ActionBarActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AsyncHttpRequest task = new AsyncHttpRequest(this); // 非同期開始 task.execute("指定URL"); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }--------------------------------------
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import android.app.Activity; import android.os.AsyncTask; import android.util.Log; import android.widget.TextView; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; public class AsyncHttpRequest extends AsyncTask注:jackson という json ファイルを取り扱うライブラリを一部使用しています.{ // Activity オブジェクト生成 private Activity mainActivity; public AsyncHttpRequest(Activity activity){ // 呼び出し元のアクティビティ this.mainActivity = activity; } @Override protected String doInBackground(String... strURL) { // (1)try-catchによるエラー処理 try { // (2)URLクラスを使用して通信を行う URL url = new URL(strURL[0]); URLConnection connection = url.openConnection(); // 動作を入力に設定 connection.setDoInput(true); InputStream stream = connection.getInputStream(); BufferedReader input = new BufferedReader(new InputStreamReader( stream)); // (3)データの取得 String data = ""; String tmp = ""; while ((tmp = input.readLine()) != null) { data += tmp; } // (4)終了処理 stream.close(); input.close(); return data; } catch (Exception e) { // (5)エラー処理 return e.toString(); } } protected void onPostExecute(String result){ TextView tv = (TextView) mainActivity.findViewById(R.id.view); JsonFactory factory = new JsonFactory(); try { JsonParser parser = factory.createParser(result); ArrayList title = new ArrayList (); int i = 0; while (parser.nextToken() != JsonToken.END_OBJECT) { while (parser.nextToken() != JsonToken.END_OBJECT) { String name = parser.getCurrentName(); if(name != null){ parser.nextToken(); Log.d("name",name); if(name.equals("title")){ title.add(parser.getText()); } } } } String titles = ""; for(i=0;i<title.size();i++){ titles = titles + "title:" + title.get(i) + "\n"; } tv.setText(titles); } catch (JsonParseException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } //tv.setText(result); } }