ネット上のテキストデータを取得する | get text data from Web | Android

スポンサーリンク

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("http://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("http://programming-cafe.com/test01.txt");
        request(uri);

ではエラーとなります。

取得したStringデータを[\n]でsplitした上で、[,]でsplitすればCSVデータも扱うことができるようになります。こんな具合で。

        String[] list = result.split("\n");

データをWordで管理し、サイトにアップして使う、といったことも簡単に実装できるようになるわけです。
度々、アプリをアップデートする必要はなくなります。