0
안녕하세요 여러분, 다른 스레드에서 listview를 업데이트하려고하면 nullpointerexception이 발생합니다. 필자는 주 활동에 대해이 작업을 수행 할 수 있지만 다른 클래스 스레드의 listview 업데이트를 원한다. 나는 무엇을 잘못하고 있는지 궁금해했고, 내가 바라 보는 뭔가가 될 수 있을까? 여기에 코드가 있습니다. 지저분한 코드를 사용해 죄송합니다. 여기 몇 시간 동안 서버 클래스가 있습니다. 나는 내가 시도한 모든 것을 기억하지 못하는 많은 다른 것들을 시도했다.notifydatasetchanged는 null을 반환합니다.
서버 :
이ServerGUI
무엇
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 방금 주 활동으로 이름을 지정했습니다. – andyADD
왜 새 활동()을 부르시겠습니까? 다른 활동에서 활동에 대한 참조를 얻어야합니다. – Chris
을 의미하는 경우 ServerGUI gui; 왜냐하면 나는 ServerGUI를 사용할 때 "내포 된 클래스가 아닙니다"라는 메시지를 내게 던지기 때문입니다. – andyADD