进度对话框asyntask param string []

时间:2016-06-24 22:01:17

标签: java android android-asynctask progressdialog

我的代码进度对话框出了什么问题?

该应用程序无需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 studio中的Logcat:

  

06-24 17:48:53.449 3333-3333 / com.ibm.fr.ftpclientimane E / AndroidRuntime:致命异常:主

     

流程:com.ibm.fr.ftpclientimane,PID:3333

     

java.lang.RuntimeException:无法启动活动ComponentInfo {com.ibm.fr.ftpclientimane / com.ibm.fr.ftpclientimane.MainActivity}:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于申请

     

在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)

     

在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)

     

在android.app.ActivityThread.access $ 800(ActivityThread.java:144)

     

在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1278)

     

在android.os.Handler.dispatchMessage(Handler.java:102)

     

在android.os.Looper.loop(Looper.java:135)

     

在android.app.ActivityThread.main(ActivityThread.java:5221)

     

at java.lang.reflect.Method.invoke(Native Method)

     

在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.ViewRootImpl.setView(ViewRootImpl.java:566)

     

在android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:272)   在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)

     

在android.app.Dialog.show(Dialog.java:298)

     

at com.ibm.fr.ftpclientimane.ConnexionFTP.onPreExecute(MainActivity.java:49)

     

在android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)

     

在android.os.AsyncTask.execute(AsyncTask.java:535)

     

at com.ibm.fr.ftpclientimane.MainActivity.onCreate(MainActivity.java:24)

     

在android.app.Activity.performCreate(Activity.java:5937)

     

在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)

     

在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)

     

在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)

     

在android.app.ActivityThread.access $ 800(ActivityThread.java:144)

     

在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1278)

     

在android.os.Handler.dispatchMessage(Handler.java:102)

     

在android.os.Looper.loop(Looper.java:135)

     

在android.app.ActivityThread.main(ActivityThread.java:5221)

     

at java.lang.reflect.Method.invoke(Native Method)

     

在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)

2 个答案:

答案 0 :(得分:1)

使用活动上下文而不是应用程序上下文 -

new ConnexionFTP(this).execute();

答案 1 :(得分:1)

只需更改此行:

new ConnexionFTP(this.getApplicationContext()).execute();  

到此:

new ConnexionFTP(this).execute();

它会起作用。 您需要传递活动上下文而不是应用程序上下文。