【问题标题】:How To Get The Current View - Android如何获取当前视图 - Android
【发布时间】:2012-07-09 07:39:43
【问题描述】:

当我运行这个线程时,当前出现 NULL 指针异常

public void run() {
    long idle = 0;
    this.touch();
    do {
        idle = System.currentTimeMillis() - lastUsed;
        Log.d(TAG, "Application is idle for " + idle + " ms");
        if ((idle > 5000) && (check == false)) { // Checking For 2 Minutes.
            Log.e("AthanAd", "2 minutes over - Show Ad.");
            adView = (AdView) view.findViewById(R.id.adView);
            adView.loadAd(new AdRequest());
            check = true;
        }
        try {
            Thread.sleep(8000); // check every 5 seconds
        } catch (InterruptedException e) {
            Log.d(TAG, "Waiter interrupted!");
        }
        if (idle > period) {
            idle = 0;
            // do something here - e.g. call popup or so
        }
    } while (!stop);
    Log.d(TAG, "Finishing Waiter thread");
}

我在这一行遇到了异常。

adView = (AdView) view.findViewById(R.id.adView);

在应用程序的顶部我声明了 View view; 但我知道我没有将它链接到任何视图。

我的问题是:如何让视图在屏幕上可见?

【问题讨论】:

  • 使用SetVisibility(..) 方法使视图可见
  • 您必须使用 findViewById 方法初始化“view”变量。
  • 我该怎么做。请举例说明在这个场景中初始化视图的正确方法是什么?

标签: android android-layout android-viewpager android-view android-viewbinder


【解决方案1】:

不要使用view.findViewById(R.id.adView); 使用findViewById(R.id.adView);

LinearLayout ln=(LinearLayout)findViewById(R.id.yourid);
ln.addView(adView);

【讨论】:

  • 当我尝试添加此代码时,我收到一条错误消息,指出“未为 ClassName 类型定义方法 findViewById(int)”。我的 ClassName 由 Thread 扩展。我想这就是我遇到这个问题的原因。
  • 为什么你没有在 oncreate 方法中初始化 adView;然后一次又一次地加载它
  • 我正在尝试从线程加载 AdView,因为在线程中我可以轻松识别经过的时间间隔。
  • 是的,我知道,但您应该在 onCreate() 中初始化或分配内存,例如 adView = (AdView)findViewById(R.id.adView);然后使用它在您的线程中加载新的 addrequest。好的:)
  • 但在那种情况下,我仍然需要活动类中的 AdView 对象。
猜你喜欢
  • 1970-01-01
  • 2014-10-17
  • 2023-03-21
  • 2012-12-06
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多