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