Thursday, 22 August 2013

Android FTP file Upload

Android FTP file Upload

I want to upload a existing file from my Android to a FTP-Server.
The following code works, but only in its own project.
public class FtpConnectDemo {
public static void main(String[] args) {
uploadDatei(SERVER, "SERVER/htdocs/wa/data/ArtikelDatenbank.csv",
"ArtikelDatenbank.csv", USER, PASSWORD);
}
public static void uploadDatei(String ftpServer, String
pfadUndDateiName, String dateiName, String benutzer, String passwort)
{
StringBuffer sb = new StringBuffer("ftp://");
sb.append(benutzer);
sb.append(':');
sb.append(passwort);
sb.append('@');
sb.append(ftpServer);
sb.append('/');
sb.append(pfadUndDateiName);
sb.append(";type=a");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
URL url = new URL(sb.toString());
URLConnection urlc = url.openConnection();
bos = new BufferedOutputStream(urlc.getOutputStream());
bis = new BufferedInputStream(new FileInputStream(dateiName));
int i;
// read byte by byte until end of stream
while ((i = bis.read()) != -1) {
bos.write(i);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
if (bos != null) {
try {
bos.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
}
If I include this code into my other project it doesn't work anymore. The
method is called by a click on a button. The onClickListener should call
the second method uploadCsvAufServer()
Here is my other project.
Calling method:
private void initObjekte() {
dbHelper = new DBController(this);
this.buttonSync = (Button) this.findViewById(R.id.button_sync);
this.buttonSync.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// 1. Erstellen einer csv-Datei, die die Werte aus 1.
enthält: OK
Synchronisierung.this.saveUpdateDateiAufSdCard();
// 2. Kopieren der Datei auf den Webserver
Synchronisierung.this.uploadCsvAufServer(
Synchronisierung.this.SERVER,
Synchronisierung.this.SERVER_DATEINAME,
Synchronisierung.this.DATEINAME,
Synchronisierung.this.BENUTZER,
Synchronisierung.this.PASSWORT
);
// Bisher als "nein" gekennzeichnete Werte werden als
sychronisiert markiert und auf "ja" gesetzt
Synchronisierung.this.dbHelper.updateSyncStatus();
Synchronisierung.this.getNichtSyncedDaten();
}
});
}
Called method:
public void uploadCsvAufServer() {
StringBuffer sb = new StringBuffer("ftp://");
sb.append(this.BENUTZER);
sb.append(':');
sb.append(this.PASSWORT);
sb.append('@');
sb.append(this.SERVER);
sb.append('/');
sb.append(this.SERVER_DATEINAME);
sb.append(";type=a");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
URL url = new URL(sb.toString());
URLConnection urlc = url.openConnection();
bos = new BufferedOutputStream(urlc.getOutputStream());
bis = new BufferedInputStream(new FileInputStream(this.DATEINAME));
int i;
// read byte by byte until end of stream
while ((i = bis.read()) != -1)
{
bos.write(i);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try
{
bis.close();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
if (bos != null) {
try
{
bos.close();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
}
Errors from LogCatsee below:
08-22 14:03:15.793: E/AndroidRuntime(773): FATAL EXCEPTION: main
08-22 14:03:15.793: E/AndroidRuntime(773):
android.os.NetworkOnMainThreadException
08-22 14:03:15.793: E/AndroidRuntime(773): at
android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
08-22 14:03:15.793: E/AndroidRuntime(773): at
java.net.InetAddress.lookupHostByName(InetAddress.java:385)
08-22 14:03:15.793: E/AndroidRuntime(773): at
java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
08-22 14:03:15.793: E/AndroidRuntime(773): at
java.net.InetAddress.getByName(InetAddress.java:289)
08-22 14:03:15.793: E/AndroidRuntime(773): at
java.net.InetSocketAddress.<init>(InetSocketAddress.java:105)
08-22 14:03:15.793: E/AndroidRuntime(773): at
java.net.InetSocketAddress.<init>(InetSocketAddress.java:90)
08-22 14:03:15.793: E/AndroidRuntime(773): at
libcore.net.url.FtpURLConnection.connectInternal(FtpURLConnection.java:219)
08-22 14:03:15.793: E/AndroidRuntime(773): at
libcore.net.url.FtpURLConnection.connect(FtpURLConnection.java:191)
08-22 14:03:15.793: E/AndroidRuntime(773): at
libcore.net.url.FtpURLConnection.getOutputStream(FtpURLConnection.java:339)
08-22 14:03:15.793: E/AndroidRuntime(773): at
de.noretec.nfcsync.view.Synchronisierung.uploadCsvAufServer(Synchronisierung.java:244)
08-22 14:03:15.793: E/AndroidRuntime(773): at
de.noretec.nfcsync.view.Synchronisierung$1.onClick(Synchronisierung.java:95)
08-22 14:03:15.793: E/AndroidRuntime(773): at
android.view.View.performClick(View.java:4204)
08-22 14:03:15.793: E/AndroidRuntime(773): at
android.view.View$PerformClick.run(View.java:17355)
08-22 14:03:15.793: E/AndroidRuntime(773): at
android.os.Handler.handleCallback(Handler.java:725)
08-22 14:03:15.793: E/AndroidRuntime(773): at
android.os.Handler.dispatchMessage(Handler.java:92)
08-22 14:03:15.793: E/AndroidRuntime(773): at
android.os.Looper.loop(Looper.java:137)
08-22 14:03:15.793: E/AndroidRuntime(773): at
android.app.ActivityThread.main(ActivityThread.java:5041)
08-22 14:03:15.793: E/AndroidRuntime(773): at
java.lang.reflect.Method.invokeNative(Native Method)
08-22 14:03:15.793: E/AndroidRuntime(773): at
java.lang.reflect.Method.invoke(Method.java:511)
08-22 14:03:15.793: E/AndroidRuntime(773): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-22 14:03:15.793: E/AndroidRuntime(773): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-22 14:03:15.793: E/AndroidRuntime(773): at
dalvik.system.NativeStart.main(Native Method)
08-22 14:03:19.773: E/Trace(787): error opening trace file: No such file
or directory (2)
Does anybody see why I got these errors?

No comments:

Post a Comment