Android Studio - Problem bei Implementierung FTP upload

  • Hallo miteinander,
    ich bin auf der Suche nach einer funktionierenenden Implementierung für einen Dateiupload via FTP innerhalb Android Studio.
    Meine jetzige Implementierung läuft auf dem PC unter Eclipse ohne Probleme. Portiere ich die Routine für den Datenversand dann in Android Studio läuft der Debugger nur bis zum ftpClient.connect(server, port);
    danach springt er sofort zum finally-Part und tut eigentlich nichts.


    Woran könnte der Fehler liegen?
    Gibt es funktionierende Snippets?


    Vielen Dank für Eure Antworten! Matthias


    Source-Code:
    ===================================================================================
    package com.example.ftpuploaddemo3;


    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;


    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;


    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;


    public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    SendFilePerFTP();
    }


    private void SendFilePerFTP() {
    String server = "servername";
    int port = 21;
    String user = "username";
    String pass = "password";



    FTPClient ftpClient = new FTPClient();
    try {
    ftpClient.connect(server, port);
    ftpClient.login(user, pass);
    ftpClient.enterLocalPassiveMode();


    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);


    File firstLocalFile = new File("/storage/emulated/0/LastGPS.json");


    String firstRemoteFile = "Neu.json";
    InputStream inputStream = new FileInputStream(firstLocalFile);


    System.out.println("Start uploading first file");
    boolean done = ftpClient.storeFile(firstRemoteFile, inputStream);
    inputStream.close();
    if (done) {
    System.out.println("The first file is uploaded successfully.");
    }


    } catch (IOException ex) {
    System.out.println("Error: " + ex.getMessage());
    ex.printStackTrace();
    } finally {
    try {
    if (ftpClient.isConnected()) {
    ftpClient.logout();
    ftpClient.disconnect();
    }
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    }
    }
    }
    =================================================================================
    Manifest File:
    =================================================================================



    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ftpuploaddemo3">


    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE "/>


    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />


    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>


    </manifest>

  • hallo also ic h würde sagen das es mit den String als Serveradresse falsch ist.


    ftpClient.connect(server, port);


    Sinnvoller wäre
    ftpClient.connect("192.268.1.254");


    Ich denke das deine Server Adresse nicht aufgelöst wird.
    Normalerweise heißt so eine Adresse auch ftp.servername.com oder so ähnlich.


    Wie gesagt teste erst mal die ip Wenn das geht ligt es an der nahmensuflösung (dhcp , Hostdatei)



    im allgemeinen würde ich empfehlen eine ftp Verbindung nicht im main Thread auszuführen.

  • Laut Logcat ist dein Hauptfehler das du einen Netzwerk-Zugriff aus dem Main-Thread startest.
    Unter Java direkt verursacht das nicht direkt einen Fehler wie unter Android, führt allerdings trotzdem dazu, das z.B. die GUI/Swing etc. einfriert.
    Deswegen musst du das ganze unter Android in einen neuen Thread starten.

  • Vielen Dank für Eure Anregungen. Die direkte Eigabe der IP-Adresse habe ich auch schon probiert. Gleiches Fehlerbild.


    Mit dem Starten der Routine aus einem weiteren Thread bin ich noch nicht vertraut und muss erst mal nachlesen wie ich das umsetzen kann. Probiere das aber bald aus und melde mich dann wieder.


    Vorerst herzlichen Dank!!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!