非同期での読み込みクラスを作りました。JSON,TEXTなど

通信関連がちょっとめんどうくさかったので、自分で使うようにクラスを作りましたので、よかったらお使いください。

使い方は

JsonLoader task = new JsonLoader();
 task.setOnCallBack(new CallBackJson(){
 @Override
 public void CallBack(String Result) {
 Toast.makeText(TopActivity.this, Result, 800).show();
 };
 });
 task.execute(RSS_FEED_URL);

RSS_FEED_URLっていうのが、URLです。そんで、CallBackと言うのが読み込みが完了した時に出力される内容です。Resultに読み込んだデータがStringで入っています。

あんまり複雑じゃない仕様にしました。

 

2つのクラスから構成しています。

・CallBackJson

・JsonLoader

です。JSONの読み込み用に作ったので、JSONってつけましたが、XMLもテキストとしてだったら読み込みができるかと思います。

java.net.UnknownHostException

なエラーが出た場合には、いろいろ問題があった時ですが、パーミッションの可能性もあります。

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

webViewを使わないとたまに見落としてしまいます。

 

以下ソースです。

・CallBackJson

package ***;

public class CallBackJson {
 
 public void CallBack(String Result){
 //ここにいろいろ関数をかけばいいと思う。(上書きされる部分)
 }
}

・JsonLoader

package ***;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import android.os.AsyncTask;
import android.widget.Toast;

public class JsonLoader extends AsyncTask<String, Integer, String> {
 
 private CallBackJson callbackjson;
 
 // コンストラクタ  
 public JsonLoader() {}
 
 @Override  
 protected void onPreExecute() {}

 @Override
 protected String doInBackground(String... params) {
 String _str= getData(params[0]);
 return _str;
 }
 
 public void setOnCallBack(CallBackJson _cbj){
 callbackjson = _cbj;
 }
 
 @Override  
 protected void onPostExecute(String result) {
 callbackjson.CallBack(result);
 }  
 
 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 e.toString();
 } 
 
 return _return;  
 }
}

これは非同期で読んでくれるので、割と使いやすいかと思います。どぞどぞ、お使いください。

 

 

■追記

callbackjson = null;

をonPostExcuteの中に入れてメモリを解放してあげる必要がありました。

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

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