0

我目前有一个扩展类Thread。在那个类中,我得到一个网页的内容(这只是 JSON 数据)并解析它。这取决于我得到什么 JSON 对象,因为这决定了我采取什么行动或我必须显示什么视图。

但是我目前的做法是我在一个类中检查所有可能的 JSON 请求并基于该请求执行操作。

例如,我的班级看起来像这样:

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 回答