2012-05-27 113 views
2

我工作的機器人項目來測試FTP功能都上傳或下載文件。 下面是基於this教程我第一次嘗試代碼:上傳或下載/到FTP服務器:Android客戶端

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. 
    } 
} 

我shirt.jpg文件是存放在主體工程folder.i正在使用模擬器不是一個物理設備。我的日誌中沒有錯誤,但文件未上傳。

然後,我改變到另一種方法:

private void loadLogs() { 
    //radBtn.addView(null); 
    new processTask().execute(); 
} 
private class processTask extends AsyncTask<String, Void, Void>{ 
    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<String> name = new ArrayList<String>();        
     ArrayAdapter <CharSequence> adapter =new ArrayAdapter <CharSequence> (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 < 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<Object> adapter2 = new ArrayAdapter<Object>(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 && line.trim().length()>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); 
     } 

在我的個人偏好屏幕,我指定的FTP服務器的參數,但我也有我的logcat的一個錯誤:

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) 

回答

-1

上行發生異常?上的錯誤信息,雙擊並嘗試調試/再次

0

後望着這裏的第一次嘗試,當你說你的文件shirt.jpg被保存在主項目文件夾我不認爲你的代碼就會發現,一旦部署到設備,你可能會要麼必須是手動檔存儲在設備上爲解釋在這裏:

http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

,或者你可以上傳shirt.jpg文件(槽ADP)首先向您的應用共享目錄爲解釋在這裏:

http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

然後嘗試讀取它並將其FTP。

哦,是的我也用節省的Android文件,然後通過電子郵件發送他們的經驗,用實際設備進行測試,因爲模擬器無法爲你提供你所需要的網絡連接。

+0

謝謝,我的第二次嘗試下載。我把shirt.jpg放在FTP服務器上,我可以下載它,但是上傳並沒有奏效,我把shirt.jpg放在res/raw中,也試圖繪製,但我認爲我的代碼沒有找到它上傳 – sofo

相關問題