非同期でのファイルの読み込みはtxt,json,xmlで同じ

通信をいくつか行なっていたのですが、テキスト以外のjson,xmlでも一度文字列に並べて、そこからパースをして利用をする形だったので、同じクラスで使い回せたら便利だと思い、以前作成したJsonLoaderをFileLoaderに改めて再度、公開させていただきます。

以前は別ファイルを作成して2つのファイルでしたが、面倒だったのでひとつのファイルにまとめております。

使い方は通常の読み込みは(このブログのフィードの読み込み)

FileLoader task = new FileLoader();
task.setOnCallBack(new FileLoader.CallBackFile() {
	@Override
	public void CallBack(String Result) {
		Log.e("result", Result);

	};
});
task.execute("http://andante.in/i/feed/");

でPOSTメソッドを用いた読み込みは

List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(0);
nameValuePair.add(new BasicNameValuePair("uid", "123456"));
FileLoader task = new FileLoader(nameValuePair);
task.setOnCallBack(new CallBackFile() {
	@Override
	public void CallBack(String Result) {

	};
});
task.execute("http://andante.in/i/feed/");

上記で、json,xml,txtまた、テキストにしてパースして利用するのであればテキストベースのcsvなども利用する事ができるとおもいます。

FileLoaderのファイルは下記です。

public class FileLoader extends AsyncTask<String, Integer, String> {

    private CallBackFile callbackjson;
    private String mode = "none";
    private List<NameValuePair> _nameValuePair;

    // コンストラクタ
    public FileLoader() {
        mode = "none";
    }

    public FileLoader(List<NameValuePair> nameValuePair) {
        mode = "post";
        _nameValuePair = nameValuePair;
    }

    @Override
    protected void onPreExecute() {
    }

    @Override
    protected String doInBackground(String... params) {

        if (mode.equals("post")) {
            return getDataPost(params[0]);
        } else {
            return getData(params[0]);
        }
    }

    public void setOnCallBack(CallBackFile _cbj) {
        callbackjson = _cbj;
    }

    @Override
    protected void onPostExecute(String result) {
        callbackjson.CallBack(result);
        callbackjson =null;
    }

    public String getData(String _url) {
        DefaultHttpClient objHttp = new DefaultHttpClient();
        HttpParams params = objHttp.getParams();
        HttpConnectionParams.setConnectionTimeout(params, 3000);
        HttpConnectionParams.setSoTimeout(params, 3000);
        String _return = "";
        try {
            HttpGet objGet = new HttpGet(_url);
            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);
                }
                _return = objJson.toString();
                objStream.close();
            }
        } catch (IOException e) {
            return "";
        }
        return _return;
    }

    public String getDataPost(String sUrl) {
        String sReturn = "";
        DefaultHttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(sUrl);
        try {
            httppost.setEntity(new UrlEncodedFormEntity(_nameValuePair));
            HttpResponse response = httpclient.execute(httppost);
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            response.getEntity().writeTo(byteArrayOutputStream);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                sReturn = byteArrayOutputStream.toString();
            } else {
                return "";
            }
        } catch (UnsupportedEncodingException e) {
            return "";
        } catch (IOException e) {
            return "";
        }
        return sReturn;
    }

    public static class CallBackFile {
        public void CallBack(String Result) {

        }
    }
}

456

 

andante.in/i

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑