AsyncTaskを用いる
ネット上のウェブデータを取得します。
httpURLConnectionを使ってネット上のテキストデータにアクセスをし、取得したデータをString型に変換します。
この処理はバックグラウンドで行わせるため、AsyncTaskを用います。
ネット上へのデータにアクセス等は非同期処理で行います。
最低限の機能のみのサンプルコード
public class MainActivity extends AppCompatActivity{ private ListTask task; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onResume(){ super.onResume(); Uri uri = Uri.parse("https://programming-cafe.com/test01.txt"); task = new ListTask(); task.execute(uri); } public class ListTask extends AsyncTask<Uri, Uri, String> { @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Uri... uri) { String s; try { //正常時 s = request(uri[0]); }catch (Exception e){ s = ""; } return s; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); Log.d("Log0",result); } } private String request(Uri uri){ HttpURLConnection httpURLConnection = null; InputStream inputStream = null; String result = null; try{ URL url = new URL(uri.toString()); httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setRequestMethod("GET"); httpURLConnection.connect(); inputStream = httpURLConnection.getInputStream(); result = toString(inputStream); }catch(MalformedURLException e){ Log.d("Log0",""+e);; }catch(IOException e){ Log.d("Log0",""+e); }finally { if(httpURLConnection !=null){ httpURLConnection.disconnect(); } try{ if(inputStream !=null){ inputStream.close(); } }catch (IOException e){ Log.d("Log0",""+e); } } return result; } private String toString(InputStream inputStream) throws IOException{ BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8")); StringBuffer stringBuffer = new StringBuffer(); char[] string = new char[512]; int lineInt; while (0 <= (lineInt= bufferedReader.read(string))){ stringBuffer.append(string,0,lineInt); } return stringBuffer.toString(); } }
結果は
D/Log0: これはテストデータです。
this is test data.
今回、テキストデータの文字コードはUTF-8です。
AsyncTaskを用います。
Uri uri = Uri.parse("https://programming-cafe.com/test01.txt"); request(uri);
ではエラーとなります。
取得したStringデータを[\n]でsplitした上で、[,]でsplitすればCSVデータも扱うことができるようになります。こんな具合で。
String[] list = result.split("\n");
データをWordで管理し、サイトにアップして使う、といったことも簡単に実装できるようになるわけです。
度々、アプリをアップデートする必要はなくなります。