2015-07-03 203 views
0

我想在android studio中創建一個FTP應用程序,但我似乎無法得到它的工作。經過一些調試後,我能夠避免在代碼中出現一些錯誤,但現在當我嘗試連接到在Ubuntu中創建的本地ftp服務器時,出現以下消息「錯誤:無法連接到主機192.168.1.2」(我的ftp服務器從筆記本電腦的終端連接時工作正常)。該應用程序編譯並安裝正常。下面是從MainActivity.java代碼無法連接到FTP服務器android ftp應用程序

public boolean bindService(Intent service, ServiceConnection conn, int flags) { 
    return false; 
} 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    textView = (TextView) findViewById(R.id.textView); 
    connect = (Button) findViewById(R.id.connect_button); 
    connect.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (isNetworkAvailable()) { 
       new FTPConnect().execute(); 
      } else { 
       AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this); 
       b.setMessage("Internet connectivity failure.Try again!"); 
       b.show(); 
      } 
     } 
    }); 
} 

class FTPConnect extends AsyncTask<Void, Void, Void> { 
    ProgressDialog pDialog; 

    @Override 
    protected void onPreExecute() { 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Connecting..."); 
     pDialog.show(); 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       ftpClient = new FTPClient(); 
       try { 
        ftpClient.connect(FTPSERVER, PORT); 
        ftpClient.login(USERNAME, PASSWORD); 
        ftpClient.enterLocalPassiveMode(); 
        System.out.println("status :: " + ftpClient.getStatus()); 
        setContentView(R.layout.connected); 
        textView = (TextView) findViewById(R.id.textView); 
        FTPFile[] files = ftpClient.listFiles(); 
        DateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        for (FTPFile file : files) { 
         String details = file.getName(); 
         if (file.isDirectory()) { 
          details = "[" + details + "]"; 
         } 
         details += "\t\t" + file.getSize(); 
         details += "\t\t" + dateFormater.format(file.getTimestamp().getTime()); 
         System.out.println(details); 
        } 
       } catch (Exception e) { 
        Log.d(TAG, "Error: could not connect to host " + FTPSERVER); 
       } 
      } 
     }); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     if (null != pDialog && pDialog.isShowing()) { 
      pDialog.dismiss(); 
     } 
     super.onPostExecute(result); 
    } 
} 

// Check Internet Connection 

public boolean isNetworkAvailable() { 
    ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity == null) { 
     return false; 
    } else { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (NetworkInfo anInfo : info) { 
       if (anInfo.getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 

logcat的:

07-03 23:43:34.901 16781-16781/com.example.vagil.ftpclient_1 d/dalvikvm:晚啓用CheckJNI 07 -03 23:43:35.051 16781-16781/com.example.vagil.ftpclient_1 D/ActivityThread:setTargetHeapUtilization:0.25 07-03 23:43:35.051 16781-16781/com.example.vagil.ftpclient_1 D/ActivityThread:setTargetHeapIdealFree :8388608 07-03 23:43:35.051 16781-16781/com.example.vagil.ftpclient_1 D/ActivityThread:setTargetHeapConcurrentStart:2097152 07-03 23:43:35.391 16781-16781/com.example.vagil.f tpclient_1我/ dalvikvm:無法找到方法android.view.ViewGroup.onRtlPropertiesChanged,從方法android.support.v7.widget.Toolbar.onRtlPropertiesChanged引用 07-03 23:43:35.391 16781-16781/com.example.vagil。 ftpclient_1 W/dalvikvm:VFY:無法解析虛擬方法13338:Landroid/view/ViewGroup; .onRtlPropertiesChanged(I)V 07-03 23:43:35.391 16781-16781/com.example.vagil.ftpclient_1 D/dalvikvm: VFY:替換操作碼0x6f在0x0007 07-03 23:43:35.401 16781-16781/com.example.vagil.ftpclient_1 I/dalvikvm:無法找到方法android.content.res.TypedArray.getChangingConfigurations,從android方法引用。 support.v7.internal.widget.TintTypedArray.getChangingConfigurations 07-03 23:43:35.401 16781-16781/com.example.vagil.ftpclient_1 W/dalvikvm:VFY:無法解析虛擬方法413:Landroid/content/res/TypedArray; .getChang ()I 07-03 23:43:35.401 16781-16781/com.example.vagil.ftpclient_1 D/dalvikvm:VFY:將操作碼0x6e替換爲0x0002 07-03 23:43:35.401 16781-16781/com。 example.vagil.ftpclient_1 I/dalvikvm:無法找到方法android.content.res.TypedArray.getType,從方法android.support.v7.internal.widget.TintTypedArray.getType引用 07-03 23:43:35.401 16781- 16781/com.example.vagil.ftpclient_1 W/dalvikvm:VFY:無法解析虛擬方法435:Landroid/content/res/TypedArray; .getType(I)I 07-03 23:43:35.401 16781-16781/com .example.vagil.ftpclient_1 D/dalvikvm:VFY:將操作碼0x6e替換爲0x0002 07-03 23:43:35.511 16781-16781/com.example.vagil.ftpclient_1 D/libEGL:loaded/system/lib/egl/libEGL_adreno200 .so 07-03 23:43:35.511 16781-16781/com.example.vagil.ftpclient_1 D/l ibEGL:loaded /system/lib/egl/libGLESv1_CM_adreno200.so 07-03 23:43:35.521 16781-16781/com.example.vagil.ftpclient_1 D/libEGL:已加載/system/lib/egl/libGLESv2_adreno200.so 07 -03 23:43:35.521 16781-16781/com.example.vagil.ftpclient_1 I/Adreno200-EGL :: EGL 1.4 QUALCOMM build:AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.107_msm8625_JB_REL_2.0.3_CL3357771_release_AU(CL3357771) 構建日期:02 /十三分之二十五週一 本地分支: 遠程分支:QUIC/jb_rel_2.0.3 本地補丁:NONE 重構科:AU_LINUX_ANDROID_JB_REL_2.0.3.04.01.02.21.107 + NOTHING 07-03 23:43:35.551 16781-16781 /com.example.vagil.ftpclient_1 D/OpenGLRenderer:啓用調試模式0 07-03 23:43:54.211 16781-16781/com.example.vagil.ftpc lient_1 I/AppCompatDelegate:活動的LayoutInflater已經安裝了Factory,因此我們無法安裝AppCompat的 07-03 23:45:45.431 16781-16781/com.example.vagil.ftpclient_1 D/MainActivity:錯誤:無法連接到主機192.168.1.2

+0

你的gradle文件中是否有依賴關係?commons-net和commons- net-ftp jars? – andrewdleach

+0

我在libs文件夾中添加了commons-net-1.4.1.jar,並且在MainActivity.java之上導入了這個導入org.apache.commons.net.ftp.FTPClient; import org.apache.commons .net.ftp.FTPFile; – vagelis

+0

你可以發佈你的logcat跟蹤到這個問題嗎? – andrewdleach

回答

0

問題已解決。我使用runOnUiThread(新的Runnable()來運行連接到ftp服務器,一旦我刪除它,我就可以連接了