2014-10-01 85 views
1

我一直在试图为Android编写一个简单的3类java应用程序,但我无法弄清楚一件事。如何解决在类之间传递数据的问题?在我来说,我有3类:在Java类之间进行通信

  1. 等待数据
  2. 一个插座上解析数据
  3. 写在屏幕上的数据

第三类不能做网络部分,因为它涉及一个无法在Activity类中完成的等待循环。

那么我应该怎么做?

+0

您可以使用广播接收器或监听器 – Revathi 2014-10-01 13:57:13

+0

您需要定义“Java类之间的通信”的含义。你正在关于数据或事件还是其他事情? – Simon 2014-10-01 14:19:10

+0

使用处理程序。 https://developer.android.com/reference/android/os/Handler.html – Karakuri 2014-10-01 14:45:45

回答

2

您可以定义一个由“屏幕上写入”类实现的“Listener”,以及“parses-the-data”类用于与之通话的Listener。例如:

class Parser { 
    private ParsingFinishedListener callback; 

    public Parser(ParsingFinishedListener c) { 
     this.callback = c; 
    } 

    //some code 

    public void parse(String stuffToParse) { 
     //code 
     callback.onTextParsed(parsedText); 
    } 

    public interface ParsingFinishedListener { 
     public void onTextParsed(String textToVizualize); 
    } 
} 

class MyTask extends AsyncTask<Void, Void, Void> { 
    private ParsingFinishedListener callback;   
    public MyTask(ParsingFinishedListener c) { 
     this.callback = c; 
    } 

    ..doInBackground.. 

    ..onPostExecute(String result) { 
     Parser p = new Parser(callback); 
     p.parse(result); 
    } 
} 

class MyActivity extends Activity implements ParsingFinishedListener { 

    ...onCreate(...) { 
     ... 
     MyTask task = new MyTask((ParsingFinishedListener) this); 
     task.execute(); 
    } 
    //some code 

    @Override 
    public void onTextParsed(String result) { 
     //do something with the result 
    } 

} 

您在解析器定义你的听众,并完成解析的时候,你用它去的活动,这应该已经实现了它。

+0

感谢您的代码!我还想问一下,如果有一种方法可以在不涉及Android库的情况下执行此操作? – Genesis 2014-10-01 18:19:58

+0

我只添加了AsyncTask,因为你没有指定你如何运行你的查询,你可以按你喜欢的方式实现它,只需将Listener以某种方式传递给Parser即可。 – 2014-10-02 14:32:15

+0

哦,好吧,我现在明白了!谢谢 :) – Genesis 2014-10-02 19:13:16