Note that there are some explanatory texts on larger screens.

plurals
  1. POUpload or Download from/to ftp server: Android Client
    primarykey
    data
    text
    <p>I'm working on android project to test FTP functions both upload or download files. Here's my first try code based on <a href="http://www.jibble.org/simpleftp/" rel="nofollow">this</a> tutorial:</p> <pre><code>public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); try { SimpleFTP ftp = new SimpleFTP(); // Connect to an FTP server on port 21. ftp.connect("ftp.olympe-network.com", 21, "username", "password"); // Set binary mode. ftp.bin(); // Change to a new working directory on the FTP server. ftp.cwd("web"); // Upload some files. ftp.stor(new File("shirt.jpg")); //ftp.stor(new File("comicbot-latest.png")); // You can also upload from an InputStream, e.g. ftp.stor(new FileInputStream(new File("shirt.jpg")), "shirt.jpg"); /*ftp.stor(someSocket.getInputStream(), "blah.dat"); */ // Quit from the FTP server. ftp.disconnect(); } catch (IOException e) { // Jibble. } } </code></pre> <p>My shirt.jpg file is store in the main project folder.i am using emulator not a physical device. I didn't have error in my log, but the file is not uploaded.</p> <p>Then, i changed to another approach:</p> <pre><code>private void loadLogs() { //radBtn.addView(null); new processTask().execute(); } private class processTask extends AsyncTask&lt;String, Void, Void&gt;{ private ProgressDialog Dialog = new ProgressDialog(activitiMain.this); private TextView log; private Spinner s; protected void onPreExecute() { Dialog.setMessage("Loading..."); Dialog.show(); } @Override protected Void doInBackground(String... arg0) { FTPClient client = new FTPClient(); try { SharedPreferences myPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); String ipaddr = myPref.getString("etServer", ""); String port= myPref.getString("port", "21"); String logFile= myPref.getString("logfname", "error_log"); String filePath= myPref.getString("path", "/public_html"); String uname= myPref.getString("uname", ""); String pass= myPref.getString("pass", ""); client.connect(ipaddr,21); client.enterLocalPassiveMode(); boolean login = client.login(uname, pass); client.changeWorkingDirectory(filePath); System.out.println(client.printWorkingDirectory()); BufferedReader reader = null; String line = null; sv = new ScrollView(activitiMain.this); sv.setLayoutParams(LP_FF); LinearLayout loglay = new LinearLayout(activitiMain.this); loglay.setOrientation( LinearLayout.VERTICAL ); //FTPFile[] ftpFiles = client.listFiles(); FTPFile[] ftpFiles = client.listFiles(); ArrayList&lt;String&gt; name = new ArrayList&lt;String&gt;(); ArrayAdapter &lt;CharSequence&gt; adapter =new ArrayAdapter &lt;CharSequence&gt; (getBaseContext(), android.R.layout.simple_spinner_item ); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); adapter.add("Select File");*/ //s = new (Spinner)findViewById(R.id.Spinner01); s = new Spinner(activitiMain.this); for (int i = 0; i &lt; ftpFiles.length; i++) { String fname =ftpFiles[i].getName(); Log.i("FTP", "File " +i +" : "+fname); name.add(fname); long length = ftpFiles[i].getSize(); //adapter2.add(ftpFiles[i].getName()); //String readableLength = FileUtils.byteCountToDisplaySize( length ); ///System.out.println( name + ":\t\t" + readableLength ); } //String [] strArray =null; //strArray.toArray(name); String [] files = name.toArray(new String[name.size()]); @SuppressWarnings("unchecked") ArrayAdapter&lt;Object&gt; adapter2 = new ArrayAdapter&lt;Object&gt;(getApplicationContext(), android.R.layout.simple_spinner_item,files); adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s.setAdapter(adapter2); loglay.addView(s); Log.i("Files", ftpFiles.toString()); for (FTPFile ftpFile : ftpFiles) { String fileName = ftpFile.getName(); if (fileName.equals(logFile)){ try { InputStream stream = client.retrieveFileStream(fileName); reader = new BufferedReader(new InputStreamReader(stream, "UTF-8")); //line = reader.readLine(); while ((line = reader.readLine())!= null &amp;&amp; line.trim().length()&gt;0) { //System.out.println(line); log = new TextView(activitiMain.this); String trail = line; log.setTextColor(Color.GREEN); log.setPadding(10, 5, 0, 5); log.setText(trail); loglay.addView(log); } sv.addView(loglay); } finally { if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} } } } client.logout(); } catch (IOException e) { e.printStackTrace(); } finally { try { client.disconnect(); } catch (IOException e) { e.printStackTrace(); } } return null; } protected void onPostExecute(Void unused) { Dialog.dismiss(); setContentView(sv); } </code></pre> <p>In my preference screen, i specified the ftp server parameters, but i got also an error in my logcat:</p> <pre><code> 05-27 18:36:38.237: ERROR/AndroidRuntime(585): FATAL EXCEPTION: main 05-27 18:36:38.237: ERROR/AndroidRuntime(585): java.lang.NullPointerException 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.view.ViewGroup.addViewInner(ViewGroup.java:1969) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.view.ViewGroup.addView(ViewGroup.java:1865) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.view.ViewGroup.addView(ViewGroup.java:1845) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:217) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.app.Activity.setContentView(Activity.java:1658) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at com.sam.remote.activitiMain$processTask.onPostExecute(activitiMain.java:160) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at com.sam.remote.activitiMain$processTask.onPostExecute(activitiMain.java:1) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.os.AsyncTask.finish(AsyncTask.java:417) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.os.AsyncTask.access$300(AsyncTask.java:127) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.os.Handler.dispatchMessage(Handler.java:99) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.os.Looper.loop(Looper.java:123) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at android.app.ActivityThread.main(ActivityThread.java:4627) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at java.lang.reflect.Method.invokeNative(Native Method) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at java.lang.reflect.Method.invoke(Method.java:521) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 05-27 18:36:38.237: ERROR/AndroidRuntime(585): at dalvik.system.NativeStart.main(Native Method) </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload