0

我想获取文件名并将它们显示在 o 列表中,但是有错误

 ls=sftpChannel.ls("/home/volkan/");

                     l.setAdapter(new BaseAdapter() {

                         public View getView(int position, View convertView,
                                ViewGroup parent) {
                             view= new TextView(parent.getContext());

                             l.post(new Runnable() {
                                 public void run() {
                                     for(int i=0;i<ls.size();i++){
                                            view.setText(((LsEntry)ls.get(i)).getFilename());
                                            return;}
                                 }
                             });
                            return null;
                        }
                        public int getCount() {
                             return ls.size();
                        }

                        public Object getItem(int position) {
                            // TODO Auto-generated method stub
                            return null;
                        }

                        public long getItemId(int position) {
                            // TODO Auto-generated method stub
                            return 0;
                        }



                     });

11-06 15:45:00.955: E/AndroidRuntime(18820): 致命异常: Thread-1344 11-06 15:45:00.955: E/AndroidRuntime(18820): android.view.ViewRootImpl$CalledFromWrongThreadException: 只有原始线程创建视图层次结构的可以触摸其视图。11-06 15:45:00.955: E/AndroidRuntime(18820): 在 android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4267) 11-06 15:45:00.955: E/AndroidRuntime(18820): 在 android. view.ViewRootImpl.invalidateChild(ViewRootImpl.java:855) 11-06 15:45:00.955: E/AndroidRuntime(18820): 在 android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:904) 11-06 15:45: 00.955: E/AndroidRuntime(18820): 在 android.view.ViewGroup.invalidateChild(ViewGroup.java:4005) 11-06 15:45:00.955: E/AndroidRuntime(18820): 在 android.view.View.invalidate(View .java:8716) 11-06 15:45:00.955: E/AndroidRuntime(18820):

4

2 回答 2

0

你从哪里调用这部分代码?根据错误消息,您正在使用与 UI 线程不同的东西。这会导致你的问题...

Adapter 实现也坏了,getView 应该返回 position 参数引用的视图。

public View getView(int position, View convertView, ViewGroup parent) {
    final View view = new TextView(parent.getContext());
    l.post(new Runnable() {
        view.setText(((LsEntry)ls.get(position)).getFilename());
    });
    return view;
}

但这仍然很难看,因为您应该缓存已经解析的文件名...更好的方法可能是恕我直言,在单独的线程中进行文件名映射,如果您有该结果,则设置适配器。这将大大简化你的工作......

于 2012-11-06T14:24:41.467 回答
0

您不能从不同的线程更新 UI。我已经更新了你的代码。核实..

 ls=sftpChannel.ls("/home/volkan/");

l.setAdapter(new BaseAdapter() {

public View getView(int position, View convertView,
       ViewGroup parent) {
    view= new TextView(parent.getContext());  
    view.setText(((LsEntry)ls.get(position)).getFilename());
    return view;
}
public int getCount() {
    return ls.size();
}

public Object getItem(int position) {
   // TODO Auto-generated method stub
   return null;
}

public long getItemId(int position) {
   // TODO Auto-generated method stub
   return 0;
}

});
于 2012-11-06T14:14:57.813 回答