0

現在、拡張するクラスがあります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...
    }
}

それが良い考えかどうかはわかりません。しかし、もしそうなら、私の例のようにコールバックを作成するにはどうすればよいですか? それはどういうわけか可能ですか?

4

1 に答える 1

0

コールバックは使用しませんが、MyJsonHandler のようなハンドラー オブジェクトを使用します。

public class MyClass
{
    public void MyFunc()
    {
        (new Communicator("http://url.tld", "House", new MyJsonHandler())).start();
    }

}

public class MyJsonHandler() {

         public void handle(JsonObject jo) {
         // ...
          }

}

または、必要なときに新しい MyJsonHandler を作成します。

public void run()
    {
        // ....

        JSONObject jObject = new JSONObject(page); 
        if ( !jObject.isNull(this.JsonString) )
        {
            // THen call the CallbackMethod...
           new MyJsonHandler().handle(jObject);
        }
    }
于 2012-07-19T08:15:36.087 に答える