Java 为什么不';我的听众不是都注册了吗?
我希望得到: 我下载了 你没有下载 欠载模式活性 但我只得到: 欠载模式活性Java 为什么不';我的听众不是都注册了吗?,java,android,Java,Android,我希望得到: 我下载了 你没有下载 欠载模式活性 但我只得到: 欠载模式活性 可能是什么问题?在代码中,通过调用mDownloadListener.ondownload()执行此操作;在DownloadManager类中 public interface DownloadListener { public void onDownloaded(); } public class DownloadManager { private static DownloadManager i
可能是什么问题?在代码中,通过调用mDownloadListener.ondownload()执行此操作;在DownloadManager类中
public interface DownloadListener {
public void onDownloaded();
}
public class DownloadManager {
private static DownloadManager instance;
private DownloadListener mDownloadListener;
public static synchronized DownloadManager getInstance(){
if(instance == null)
instance = new DownloadManager();
return instance;
}
private DownloadManager() {
myHandler.sendEmptyMessageDelayed(29, 3 * 1000);
}
public void registerDownloadListener(DownloadListener downloadListener) {
mDownloadListener = downloadListener;
}
Handler myHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 29) {
mDownloadListener.onDownloaded();
return true;
}
return false;
}
});
}
public class I implements DownloadListener {
public I() {
DownloadManager.getInstance().registerDownloadListener(this);
}
@Override
public void onDownloaded() {
Log.e("TAG", "I onDownloaded");
}
}
public class You implements DownloadListener {
public You() {
DownloadManager.getInstance().registerDownloadListener(this);
}
@Override
public void onDownloaded() {
Log.e("TAG", "You onDownloaded");
}
}
public class PATTERNSActivity extends Activity implements DownloadListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new I();
new You();
DownloadManager.getInstance().registerDownloadListener(this);
}
@Override
public void onDownloaded() {
Log.e("TAG","PATTERNSActivity onDownloaded");
}
}
在“我不明白为什么应该执行I和YOU类的OnDownload方法”中,它们从未被调用。只调用侦听器的OnDownloaded方法。在代码中,通过调用mDownloadListener.OnDownloaded()执行此操作;在DownloadManager类中
public interface DownloadListener {
public void onDownloaded();
}
public class DownloadManager {
private static DownloadManager instance;
private DownloadListener mDownloadListener;
public static synchronized DownloadManager getInstance(){
if(instance == null)
instance = new DownloadManager();
return instance;
}
private DownloadManager() {
myHandler.sendEmptyMessageDelayed(29, 3 * 1000);
}
public void registerDownloadListener(DownloadListener downloadListener) {
mDownloadListener = downloadListener;
}
Handler myHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 29) {
mDownloadListener.onDownloaded();
return true;
}
return false;
}
});
}
public class I implements DownloadListener {
public I() {
DownloadManager.getInstance().registerDownloadListener(this);
}
@Override
public void onDownloaded() {
Log.e("TAG", "I onDownloaded");
}
}
public class You implements DownloadListener {
public You() {
DownloadManager.getInstance().registerDownloadListener(this);
}
@Override
public void onDownloaded() {
Log.e("TAG", "You onDownloaded");
}
}
public class PATTERNSActivity extends Activity implements DownloadListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new I();
new You();
DownloadManager.getInstance().registerDownloadListener(this);
}
@Override
public void onDownloaded() {
Log.e("TAG","PATTERNSActivity onDownloaded");
}
}
在“我不明白为什么应该执行I和YOU类的OnDownload方法”中,它们从未被调用。只调用侦听器的OnDownloaded方法。将注册的下载程序保存在单个实例属性中:
@Override
public void onDownloaded() {
Log.e("TAG","PATTERNSActivity onDownloaded");
}
最后注册的是活动的:
// Last call's downloadListener wins.
public void registerDownloadListener(DownloadListener downloadListener) {
mDownloadListener = downloadListener;
}
根据您的评论进行编辑
将注册下载程序保存在单个实例属性中:
@Override
public void onDownloaded() {
Log.e("TAG","PATTERNSActivity onDownloaded");
}
最后注册的是活动的:
// Last call's downloadListener wins.
public void registerDownloadListener(DownloadListener downloadListener) {
mDownloadListener = downloadListener;
}
根据您的评论进行编辑
首先,我认为您没有使用列表。您只需覆盖该值,即可始终获得最后一个值:
public void registerDownloadListener(DownloadListener downloadListener) {
mDownloadListeners.add(downloadListener);
}
...
public boolean handleMessage(Message msg) {
if (msg.what != 29) {
return false;
}
for (DownloadListener listener : mDownloadListeners) {
listener.onDownloaded();
}
return true;
}
首先,我认为您没有使用列表。您只需覆盖该值,即可始终获得最后一个值:
public void registerDownloadListener(DownloadListener downloadListener) {
mDownloadListeners.add(downloadListener);
}
...
public boolean handleMessage(Message msg) {
if (msg.what != 29) {
return false;
}
for (DownloadListener listener : mDownloadListeners) {
listener.onDownloaded();
}
return true;
}
我知道,如果我为正在侦听下载状态的3个对象中的每一个创建3个不同的DowmloadManager,则一切正常。但我只想要一个下载管理器。“有没有可能?”流浪汉肯定;通过将每个侦听器保存在列表中来注册它。在处理程序中,遍历列表,调用每个侦听器的
ondownload
。请参阅编辑。因此,我需要将观察者模式与侦听器列表一起使用来解决此问题。这是唯一达到这种目的的方法?@driver如果你想调用多个方法而不是一个,除了跟踪所有你想调用的方法,你还能做什么?!您好,我需要与上述解释相关的示例。如果您不介意,请提供一些示例。谢谢我知道,如果我为正在侦听下载状态的3个对象中的每一个创建3个不同的DowmloadManager,那么一切都可以。但我只想要一个下载管理器。“有没有可能?”流浪汉肯定;通过将每个侦听器保存在列表中来注册它。在处理程序中,遍历列表,调用每个侦听器的ondownload
。请参阅编辑。因此,我需要将观察者模式与侦听器列表一起使用来解决此问题。这是唯一达到这种目的的方法?@driver如果你想调用多个方法而不是一个,除了跟踪所有你想调用的方法,你还能做什么?!您好,我需要与上述解释相关的示例。如果您不介意,请提供一些示例。谢谢