現在、拡張するクラスがありますThread
。そのクラスでは、Web ページのコンテンツ (単なる JSON データ) を取得し、それを解析します。それは、取得する JSON オブジェクトによって異なります。これは、実行するアクションまたは表示する必要があるビューを決定するためです。
しかし、私が現在行っている方法は、可能なすべての JSON 要求に対して 1 つのクラスをチェックインし、それに基づいてアクションを実行することです。
例、私のクラスは次のようになります。
public class Communicator extends Thread
{
Thread threadToInterrupt = null;
String URL = null;
public Houses ( String URL )
{
threadToInterrupt = Thread.currentThread();
setDaemon(true);
this.URL = URL;
}
public void run()
{
// Code to get the JSON from a web page
// Finally parse the result into a String
String page = sb.toString();
JSONObject jObject = new JSONObject(page);
if ( !jObject.isNull("house") )
{
// do alot of stuff
}
else if ( !jObject.isNull("somethingelse") )
{
// do alot of other stuff
}
}
}
ご想像のとおり、このクラスはすぐに大量の JSON チェックとコードでごちゃごちゃになります。これは正しい方法ではないように感じます。
呼び出されるコールバック メソッドを渡した方がよいのではないでしょうか。クラスを次のように変更できるように:
public class Communicator extends Thread
{
Thread threadToInterrupt = null;
String URL = null;
public Houses ( String URL, String JsonString, object CallbackMethod )
{
// ... code
}
public void run()
{
// ....
JSONObject jObject = new JSONObject(page);
if ( !jObject.isNull(this.JsonString) )
{
// THen call the CallbackMethod...
CallbackMethod ( jObject );
}
}
}
public class MyClass
{
public void MyFunc()
{
(new Communicator("http://url.tld", "House", this.MyCallback)).start();
}
public void MyCallback(JSONObject jObject)
{
// Then i can perform actions here...
}
}
それが良い考えかどうかはわかりません。しかし、もしそうなら、私の例のようにコールバックを作成するにはどうすればよいですか? それはどういうわけか可能ですか?