我仍然在掌握Android,并且可以真正使用一些建立FTP连接的帮助。 我最初使用Eclipse并尝试添加apache.commons库,但是我似乎从未编译过的代码。从那时起我尝试使用Intellij IDEA的一些不同的代码,我现在使用的代码编译但是应用程序一直在崩溃。
我已按照以下地址的教程尝试建立FTP连接并显示欢迎消息:
http://courses.coreservlets.com/Course-Materials/pdf/android/Android-Networking-1.pdf
我可以提交一个地址来尝试连接但是一旦我点击按钮建立连接程序崩溃。
很抱歉代码的数量,但我不想遗漏任何可能有用的内容。首先是布局然后是主体,最后一节(SocketUtils)是在一个单独的类文件中。
我们将非常感谢任何建议, 谢谢
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/Prompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/FTP_Prompt" />
<EditText
android:id="@+id/ftp_host"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_below="@+id/Prompt"
android:hint="Input URL"
android:inputType="textUri" >
<requestFocus></requestFocus>
</EditText>
<Button
android:id="@+id/button"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_below="@+id/ftp_host"
android:text="@string/ftp_button"
android:onClick="showMessage" />
<TextView
android:id="@+id/ftp_message"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_below="@+id/button"/>
</RelativeLayout>
public class MainActivity extends Activity {
private EditText mFtpHost;
private TextView mFtpMessageResult;
private static final int FTP_PORT = 21;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFtpHost = (EditText) findViewById(R.id.ftp_host);
mFtpMessageResult = (TextView) findViewById(R.id.ftp_message);
}
public void showMessage (View clickedButton) {
String host = mFtpHost.getText().toString();
try{
Socket socket = new Socket(host, FTP_PORT);
BufferedReader in = SocketUtils.getReader(socket);
List<String> results = new ArrayList<String>();
String line = in.readLine();
results.add(line);
if (line.startsWith("220-")) {
while((line = in.readLine()) != null) {
results.add(line);
if ((line.equals("220") ||
line.startsWith("220 "))) {
break;
}
}
}
String output = makeOutputString(results);
mFtpMessageResult.setText(output);
socket.close();
}
catch (UnknownHostException uhe) {
mFtpMessageResult.setText("Unknown host: " + host);
uhe.printStackTrace();
}
catch (IOException ioe) {
mFtpMessageResult.setText("IOException: " + ioe);
ioe.printStackTrace();
}
}
private String makeOutputString(List<String> results) {
StringBuilder output = new StringBuilder();
for (String s: results) {
output.append(s + "\n");
}
return(output.toString());
}
}
public class SocketUtils {
public static BufferedReader getReader(Socket s) throws IOException {
return(new BufferedReader(new InputStreamReader(s.getInputStream())));
}
}