간단한 유즈넷 뉴스 리더를 구축하고 있습니다. 아래 코드가 작동합니다. SharedPreferences에서 사용자 이름, 호스트, 암호를 가져 와서 서버에 연결하고 정상적으로 인증하지만 모든 작업이 완료 될 때까지 UI를 잠급니다.소켓에 연결하면 UI가 잠 깁니다.
UI를 잠그지 않도록이 코드를 어떻게 변경합니까?
package com.webfoo.newz;
import java.io.IOException;
import java.net.SocketException;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import org.apache.commons.net.nntp.NNTPClient;
public class NewzActivity extends Activity {
TextView statusText;
String PREFS_NAME = "MyPrefsFile";
SharedPreferences settings;
NNTPClient nntpClient;
int port;
String username;
String password;
String host;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.statusText = (TextView)findViewById(R.id.connectionStatusTextView);
this.nntpClient = new NNTPClient();
this.settings = getSharedPreferences(PREFS_NAME, 0);
}
public void openSettings(View button){
Intent settingsIntent = new Intent(NewzActivity.this, SettingsActivity.class);
startActivity(settingsIntent);
}
public void makeConnection(View button) {
this.statusText.setText("Connecting...");
this.port = settings.getInt("UsenetPort", 563);
this.host = settings.getString("UsenetHost", "");
this.nntpClient.setDefaultPort(port);
this.nntpClient.setDefaultTimeout(9999);
// this.nntpClient.setConnectTimeout(9999);
this.statusText.setText("Connecting to " + host);
try {
this.nntpClient.connect(host);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.statusText.setText("Connected to " + host);
if(nntpClient.isConnected()){
setAuthDetails();
}else{
this.statusText.setText("Failed to Connected to " + host);
}
}
private void setAuthDetails() {
this.username = settings.getString("UsenetUsername", "");
this.password = settings.getString("UsenetPassword", "");
try {
nntpClient.authinfoUser(username);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
nntpClient.authinfoPass(password);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
statusText.setText("Authenticated as " + username);
}
}
내가 당신은 AsyncTask를의 서브 클래스를 생성 AsyncTask를 (뿐만 아니라, 사용자 이름, 암호, 호스트 문자열과 다른 모든 것들?) – dotty
내 nntpClient 개체를 전달할 수 있습니다, 그리고 예, 당신은 그것을에 인수를 전달할 수 있습니다, 또는 인수를 취하는 생성자를 만듭니다. – Kaj
변수를 전달하는 예를 들어 주시겠습니까? – dotty