Android 线程无法修改布局
在Android 线程无法修改布局,android,multithreading,user-interface,nullpointerexception,findviewbyid,Android,Multithreading,User Interface,Nullpointerexception,Findviewbyid,在onCreate()方法中,我有以下代码: protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.mapview); setupGui(); mHandler = new Handler(); mv = new MapView(); (new Thread(){
onCreate()
方法中,我有以下代码:
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.mapview);
setupGui();
mHandler = new Handler();
mv = new MapView();
(new Thread(){
public void run() {
while (true) {
try {
Thread.sleep(1000);
mHandler.post(new Runnable() {
@Override
public void run() {
mv.createPlane(true);
}
});
} catch (Exception e) {
}
}
}
}).start();
}
其中mv是我所在的类的名称,它包含一个createPlane(boolean)
方法,用于将一些新元素放置到UI上。此方法:
public void createPlane(boolean left) {
linL = (LinearLayout) findViewById(R.id.ll);
}
这是行不通的。(
NullPointerException
atfindViewById()
)很可能,问题在于您的事情顺序。您必须先膨胀视图,然后才能尝试按ID在该视图中查找视图。在膨胀任何内容之前,您正在尝试findViewById
!您所拥有的只是MapView
对象
您需要确保在运行线程之前,包含
R.id.ll
的视图已膨胀 发布createPlane方法,我们可以提供帮助you@vspallas在检查了问题出现的具体位置之后,这一行就是有问题的那一行,因此我认为没有理由发布其他数百行。在此之后,它立即停止工作。@L.Bajczi请发布有效代码的版本。最简短的例子。否则,我帮不了你什么也帮不了你。要么是版面膨胀问题(在膨胀的版面中找不到视图),要么是你从UI线程以外的线程修改UI,这是被禁止的。在第二种情况下,对修改UI以修复问题的行使用runOnUIThread方法您试图对linL做什么?添加一个子线程或其他需要UiThread的东西?它就在setContentView(R.layout.mapview)之后;其中确实包含此元素。@L.Bajczi在我继续帮助之前,请添加更多代码-一个完整、简短的工作代码集。否则,这将是一个猫捉老鼠的游戏,我猜,你确认或否认,这是行不通的。我已经编辑了这个问题,我希望这样可以理解。抱歉。@L.Bajczi yes-您正在调用mv.makePlane()-mv是MapView的一个特定实例。我认为它还没有膨胀。问题也可能是弗拉基米尔对你问题的评论。也要探索这条道路。