0
嘿,我試圖從另一個線程更新列表視圖時,我得到一個nullpointerexception。我能夠在我的主要活動中做到這一點,但我想從另一個類的線程更新列表視圖,我想知道我做錯了什麼,可能是我忽略的東西?這是代碼。對不起,亂碼,我一直在這裏幾個小時這裏是服務器類。我嘗試了很多不同的東西,我不記得我嘗試過的一切。notifydatasetchanged返回null
服務器:
public class Server extends Thread{
private ServerSocket serverSocket;
private ServerGUI gui;
Context context;
private Server s;
ArrayList<String> addclientlist;
private ListView listview;
private ArrayAdapter<String> adapter;
String inforeceive;
public Server(Context context){
this.context=context;
gui = new ServerGUI();
listview = (ListView) ((Activity)context).findViewById(R.id.list);
}
@Override
public void run() {
gui.runOnUiThread(new Runnable(){
@Override
public void run() {
try{
int port = 8000;
serverSocket = new ServerSocket(port);
TextView listport = (TextView)((Activity)context).findViewById(R.id.textViewportlisten);
listport.setText("Listening On Port: "+serverSocket.getLocalPort());
addclientlist = new ArrayList<String>();
adapter = new ArrayAdapter<String>(gui,
android.R.layout.simple_list_item_1, android.R.id.text1, addclientlist);
listview.setAdapter(adapter);
}catch(Exception e){
}
setOnline();
}
});
super.run();
}
public void setOnline(){
new Thread(new Runnable() {
@Override
public void run() {
try{
while(true){
final Socket cs = serverSocket.accept();
final DataInputStream dis = new DataInputStream(cs.getInputStream());
gui.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
final EditText logtext = (EditText) ((Activity) context).findViewById(R.id.editTextlog);
logtext.append("New client from: " + cs.getInetAddress() + "\n");
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
try{
adapter.add(dis.readUTF().toString());
adapter.notifyDataSetChanged();
dis.close();
}catch(Exception e){
logtext.append(e.toString()+"\n");
}
super.onPostExecute(aVoid);
}
}.execute();
} catch (Exception e) {
}
}
});
}
}catch(IOException e){
}
}
}).start();
}
}
ServerGUI我剛剛命名爲mainactivity – andyADD 2014-09-05 17:53:15
爲什麼要調用'new Activity()'呢?你應該從別的東西那裏得到對活動的引用。 – Chris 2014-09-05 18:01:46
如果你的意思是ServerGUI gui;是因爲當我使用ServerGUI時,我得到「不是一個封閉的類」拋給我。 – andyADD 2014-09-05 18:05:43