0

谁能告诉我可能是什么问题?

这是我的代码

public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.book_list);
        lst = (ListView) findViewById(R.id.listView1);
    new Thread(new Runnable() {
            public void run() {
                data = fetchData();                                 
                runOnUiThread(new Runnable() {                       
                    @Override
                    public void run() {
                        ArrayList<String> users = parseJSON(data);                                                
                    }
                });   
            }
        }).start();

final SimpleAdapter adapter =
            new SimpleAdapter(this, mylistData, R.layout.rowlayout,
                    row , new int[] {R.id.label,R.id.label1});
            lst.setAdapter(adapter);

错误日志

05-24 11:08:32.218: E/AndroidRuntime(19121): 致命异常: Thread-12 05-24 11:08:32.218: E/AndroidRuntime(19121): android.view.ViewRoot$CalledFromWrongThreadException: 只有原始线程创建视图层次结构的可以触摸其视图。05-24 11:08:32.218: E/AndroidRuntime(19121): 在 android.view.ViewRoot.checkThread(ViewRoot.java:3041) 05-24 11:08:32.218: E/AndroidRuntime(19121): 在 android. view.ViewRoot.invalidateChild(ViewRoot.java:647) 05-24 11:08:32.218: E/AndroidRuntime(19121): 在 android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:673) 05-24 11:08: 32.218: E/AndroidRuntime(19121): 在 android.view.ViewGroup.invalidateChild(ViewGroup.java:2511) 05-24 11:08:32.218: E/AndroidRuntime(19121): 在 android.view.View.invalidate(View .java:5255) 05-24 11:08:32.218: E/AndroidRuntime(19121): 在 android.widget.TextView。

4

1 回答 1

0

尝试使用http://developer.android.com/reference/android/view/View.html#post(java.lang.Runnable)

例如:

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.book_list);
    lst = (ListView) findViewById(R.id.listView1);

    new Thread(new Runnable() {
        public void run() {
            data = fetchData();                                 
            lst.post(new Runnable() {                       
                @Override
                public void run() {
                    ArrayList<String> users = parseJSON(data);               
                    SimpleAdapter adapter = new SimpleAdapter(this, mylistData, R.layout.rowlayout, row , new int[] {R.id.label,R.id.label1});   
                    lst.setAdapter(adapter);                              
                }
            });   
        }
    }).start();

通过这种方式,您可以异步解析 JSON 数据并以线程安全的方式修改列表视图的数据。

于 2013-05-24T06:17:42.683 回答