如何在android中从listview中的socket io中检索数据
我正在使用socket io制作android应用程序,所有数据通过socket io从服务器检索到android应用程序,这些数据应该在listview中格式化。但在arrayadapter中加载数据存在问题。我的主要活动是如何在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
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);
与