如何在android中从listview中的socket io中检索数据

如何在android中从listview中的socket io中检索数据,android,sockets,listview,arraylist,Android,Sockets,Listview,Arraylist,我正在使用socket io制作android应用程序,所有数据通过socket io从服务器检索到android应用程序,这些数据应该在listview中格式化。但在arrayadapter中加载数据存在问题。我的主要活动是 public class MainActivity extends Activity { ListView list; String[] namesArr ; ArrayList<String> mylist = new ArrayList<Str

我正在使用socket io制作android应用程序,所有数据通过socket io从服务器检索到android应用程序,这些数据应该在listview中格式化。但在arrayadapter中加载数据存在问题。我的主要活动是

public class MainActivity extends Activity {

ListView list;
String[] namesArr ;


ArrayList<String> mylist = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    helper = new databasehelper(this);

        list = (ListView)findViewById(R.id.newslist);

      SocketIO socket = null;
        try {

            socket = new SocketIO("http://**************/");

            //socket = new SocketIO("http://localhost:7010/");



        } catch (MalformedURLException e1) {

            e1.printStackTrace();
        }
        socket.connect(new IOCallback() {

            @Override
            public void onMessage(JSONObject json, IOAcknowledge ack) {
                try {
                    System.out.println("Server said:" + json.toString(2));

                 //   Log.d("json",""+json);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onMessage(String data, IOAcknowledge ack) {
                System.out.println("Server said: " + data);

             //   Log.d("json",""+ data);
            }

            @Override
            public void onError(SocketIOException socketIOException) {
                System.out.println("an Error occured");
                socketIOException.printStackTrace();
            }

            @Override
            public void onDisconnect() {
                System.out.println("Connection terminated.");
            }

            @Override
            public void onConnect() {
                System.out.println("Connection established");
            }

            @Override
            public void on(String event, IOAcknowledge ack, Object... args) {
                System.out.println("Server triggered event '" + event + "'");
            }

            @Override
            public void onMessage(JSONArray args,IOAcknowledge remoteAcknowledge) {
                // TODO Auto-generated method stub

                Log.d("main", ""+args);

                try {
                        JSONArray object = args.getJSONArray(0);
                        Log.d("object",""+object);

                        for(int n = 0; n < object.length(); n++)
                        {
                            String ob2 = object.getString(n);
                            Log.d("ob2",""+ob2);

                            //String[] myarray = new String[n];

                            mylist.add(ob2);
                        }

                        Log.d("arraylist",""+mylist);

                        namesArr = new String[mylist.size()];
                        for (int i = 0; i < mylist.size(); i++) {
                            namesArr[i] =  mylist.get(i);


                            Log.d("string array element",namesArr[i]);

                        }





                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }               
            }

        });

        // This line is cached until the connection is establisched.
        socket.send("Hello Server!"); 
            display(mylist);
        }   
  private void display(ArrayList<String> mylist) {
    // TODO Auto-generated method stub

    ArrayAdapter<String> aa = new ArrayAdapter<String> getApplicationContext(),android.R.layout.simple_list_item_1,mylist);

      Log.d("real Arraylist",""+mylist);

      //Log.d("array adapter",aa.toString());

     // list.setAdapter(aa);
}
   }
请告诉我我的代码中有什么问题,解决方案是什么???
提前感谢

您必须将后台任务中更新ui的部分移动到主线程上。这里有一段简单的代码:

runOnUiThread(new Runnable() {
     public void run() {

//stuff that updates ui

    }
});
参考:


希望这会有所帮助。:)

您必须将后台任务中更新ui的部分移动到主线程上。这里有一段简单的代码:

runOnUiThread(new Runnable() {
     public void run() {

//stuff that updates ui

    }
});
参考:


希望这会有所帮助。:)

错误是您在工作线程中设置了适配器。只能从主线程更新视图。因此,替换

list.setAdapter(dataAdapter);


错误是您在工作线程中设置了适配器。只能从主线程更新视图。因此,替换

list.setAdapter(dataAdapter);