我的代码进度对话框出了什么问题?
该应用程序无需ProgressDialog .
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new ConnexionFTP(this.getApplicationContext()).execute();
}
}
class ConnexionFTP extends AsyncTask<String, Void, String[]> {
public String modified;
public String time;
public static FTPClient mFTPClient = null;
Context context;
private ProgressDialog pdia;
public ConnexionFTP(Context applicationContext) {
// TODO Auto-generated constructor stub
this.context = applicationContext;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pdia = new ProgressDialog(this.context);
pdia.setMessage("Loading...");
pdia.show();
}
@Override
protected String[] doInBackground(String... params) {
// TODO Auto-generated method stub
mFTPClient = new FTPClient();
try {
mFTPClient.connect("192.168.1.27", 21);
if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
mFTPClient.login("imane", "aze");
mFTPClient.enterLocalPassiveMode();
String filePath = "imane.sqlite";
time = mFTPClient.getModificationTime(filePath);
File file = new File("/data/data/com.ibm.fr.ftpclientimane/files/MAJ.txt");
if (file.exists()) {
try (BufferedReader buff = new BufferedReader(new FileReader("/data/data/com.ibm.fr.ftpclientimane/files/MAJ.txt"))) {
String line;
line = buff.readLine();
modified = line;
}
} else {
File myFile = new File("/data/data/com.ibm.fr.ftpclientimane/files/MAJ.txt"); //on déclare notre futur fichier
File myDir = new File("/data/data/com.ibm.fr.ftpclientimane/files"); //pour créer le repertoire dans lequel on va mettre notre fichier
Boolean success = true;
if (!myDir.exists()) {
success = myDir.mkdir(); //On crée le répertoire (s'il n'existe pas!!)
}
if (success) {
String data = "valeur lancement négatif";
FileOutputStream output = new FileOutputStream(myFile, true); //le true est pour écrire en fin de fichier, et non l'écraser
output.write(data.getBytes());
modified = data;
}
}
}
int comparaison = time.compareTo(modified);
if (comparaison < 0) {
try {
FileOutputStream output = context.openFileOutput("imane.sqlite",
Context.MODE_PRIVATE);
Log.d("monerreur", "output");
// récupération du fichier sur le serveur
mFTPClient.retrieveFile("imane.sqlite", output);
output.close();
mFTPClient.logout();
mFTPClient.disconnect();
FileWriter fw = new FileWriter("/data/data/com.ibm.fr.ftpclientimane/files/MAJ.txt");
fw.write(time);
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
} else {
mFTPClient.logout();
mFTPClient.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(final String[] results) {
super.onPostExecute(results);
pdia.dismiss();
}
}
在android工作室中的Logcat:
06-24 17:48:53.449 3333-3333 / com.ibm.fr.ftpclientimane E / AndroidRuntime:FATAL EXCEPTION:main进程:com.ibm.fr.ftpclientimane,PID:3333 java.lang.RuntimeException:无法启动activity ComponentInfo {com.ibm.fr.ftpclientimane / com.ibm.fr.ftpclientimane.MainActivity}:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于android.app.ActivityThread上的应用程序 . 在Android.app.ActivityThread.access $ 800(ActivityThread.java:144)上的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)上的performLaunchActivity(ActivityThread.java:2298)在android.app.ActivityThread $ H.handleMessage( ActivityThread.java:1278)android.app.Handler.dispatchMessage(Handler.java:102)android.app.Looper.loop(Looper.java:135)android.app.ActivityThread.main(ActivityThread.java:5221) )at java.lang.reflect.Method.invoke(Native Method)at java.lang.reflect.Method.invoke(Method.java:372)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:899)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)引起:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序在Android.view上的android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:272)的android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)上的android.view.ViewRootImpl.setView(ViewRootImpl.java:566) . Dialog.show(Dialog.java:298)位于android.os.AsyncTask的android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)的com.ibm.fr.ftpclientimane.ConnexionFTP.onPreExecute(MainActivity.java:49) .execute(AsyncTask.java:535)位于android.app.Instrumentation的android.app.Activity.performCreate(Activity.java:5937)的com.ibm.fr.ftpclientimane.MainActivity.onCreate(MainActivity.java:24) . android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)上的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)中的callActivityOnCreate(Instrumentation.java:1105) :2360)在Android.app.Handler.dispatchMessage(Handler.java:102)的android.app.ActivityThread.access $ 800(ActivityThread.java:144)android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1278) )在android.app.Looper.loop(Looper.java:135)的android.app.ActivityThread.main(ActivityThread.java:5221)java.lang上的java.lang.reflect.Method.invoke(Native Method) . 在com.android.internal.os.ZygoteInit.main的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899)中反映.Method.invoke(Method.java:372)(ZygoteInit.java: 694)
2 回答
使用活动上下文代替应用程序上下文
只需改变这一行:
对此:
它会工作 . 您需要传递活动上下文而不是应用程序上下文 .