I am building (well, trying to build) a simple Usenet news reader. Below is the code. It captures the username, host, password from SharedPreferences and connects to the server and successfully passes authentication, but it blocks the user interface until all tasks are completed.
How can I change this code so that it does not block the user interface?
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;
@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.statusText.setText("Connecting to " + host );
try {
this.nntpClient.connect( host );
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
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) {
e.printStackTrace();
}
try {
nntpClient.authinfoPass(password);
} catch (IOException e) {
e.printStackTrace();
}
statusText.setText("Authenticated as " + username );
}
}
dotty source
share