내 서버 컴퓨터와 내 안드로이드 스마트 폰간에 통신 시스템을 만들려고합니다. 나는 마침내 좋은 결과를 얻고있다. 그러나, 나는 안드로이드 전망에 문제가있다. 특히, 확장이없는 클래스의 텍스트 뷰의 ".setText()"메서드를 사용하려고합니다. 내 textview 개체를 해당 클래스로 전달했지만 "textview.setText()"메서드는 아무런 오류없이 UI에 아무런 영향을주지 않고 작동합니다. 코드를 작성해 보겠습니다. 좀 더 명확하게 이해하고 코드를 시험해 볼 수있는 기회를 갖게 될 것입니다.다른 클래스를 통한 텍스트 뷰 편집
public class NetworkingActivity extends Activity {
public static String message;
public static EditText editext;
public static TextView textview;
private Connector connector;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void buttonClicked(View v){
editext = (EditText) findViewById(R.id.editText1);
textview = (TextView) findViewById(R.id.textview);
message = editext.getText().toString();
connector = new Connector(NetworkingActivity.this);
connector.start();
}
public void yenile(String respond){
textview.setText(respond);
editext.setText("");
}
public void yenileClicked(View v){
textview.setText(Connector.respond);
editext.setText("");
}
public static class Connector extends Thread{
private static final int PORT = 3588;
private static final String IpAddress = "XXX.XXX.XXX.XXX"; // of course X's have a int value
public static String respond;
private NetworkingActivity activity;
public Connector(NetworkingActivity activity){
this.activity = activity;
}
public void run() {
try {
Socket socket = new Socket(IpAddress, PORT);
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
Scanner scanner = new Scanner(socket.getInputStream());
writer.println(NetworkingActivity.message);
respond = scanner.nextLine();
activity.yenile(respond);
socket.close();
} catch (Exception e) {
}
}
}
}
마지막으로, 한 가지 더 말씀 드리겠습니다. 메소드 yenileClicked()는 버튼을 통해 "android : onClick ="yenileClicked "인 xml 파일의 코드에 의해 지정됩니다. 문제는 다른 클래스의 장애가 거의 같은 방법으로 진행된다는 것입니다. yenile();
문제는 별도의 스레드에서보기를 편집 할 수 없다는 것입니다. http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable) 이렇게하면 'activity.runOnUIThread (new Runnable {public void run() {activity .0enile (respond);}}); ' 현재 코드 작업을 수행합니다. 전체 활동을 전달하는 대신 인터페이스 콜백을 만드는 것이 좋습니다 ... –