2014-03-28 14 views
-2
public class connect extends AsyncTask<Void, Void, Void> { 

    Boolean login 
    FTPClient client = new FTPClient() 
    FileOutputStream fos = null 
    FileInputStream fis = null 
    BufferedReader br = null 
    StringBuilder text1 = new StringBuilder() 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute() 

     pDialog = new ProgressDialog(MainActivity.this) 
     pDialog.setMessage("Getting Data ...") 
     pDialog.setIndeterminate(false) 
     pDialog.setCancelable(true) 
     pDialog.show() 

    } 

    @SuppressLint("ShowToast") 
    @Override 
    protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 
     try { 
      client.connect("ftp.byethost12.com") 
      // System.out.println(client.getReplyString()) 
      login = client.login("b12_14535591", "mahdirida") 
      // if (login) 
      // System.out.println("login complete") 

      client.sendCommand(FTPCmd.CHANGE_WORKING_DIRECTORY, "htdocs"); 
      // System.out.println(client.getReplyString()) 

      InputStream si = client.retrieveFileStream("json2.txt") 
      DataInputStream dis = new DataInputStream(si) 

      String line 
      while ((line = dis.readLine()) != null) { 
       text1.append(line + "\n") 
      } 
      //System.out.print(text1.toString()) 
      Toast.makeText(getParent(), "complete", Toast.LENGTH_LONG).show() 
     } catch (SocketException e) { 
      // TODO Auto-generated catch block 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 

     } 

     return null 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result) 
     if(pDialog.isShowing()) 
      pDialog.dismiss() 
     text.setText(text1.toString())// show the result 
    } 

} 

如果我在類中這樣做,並作爲Android應用程序運行它的工作!但在我的活動這是行不通的如何使它在我的活動中起作用?

03-28 13:39:06.473: E/AndroidRuntime(1751): FATAL EXCEPTION: AsyncTask #1 
    03-28 13:39:06.473: E/AndroidRuntime(1751): java.lang.RuntimeException: An error occured while executing doInBackground() 
    03-28 13:39:06.473: E/AndroidRuntime(1751):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
    03-28 13:39:06.473: E/AndroidRuntime(1751):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 

--- 

編輯:

03-29 11:46:25.331: E/WindowManager(782): Activity com.mahdi.ftpconnect.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40d27e80 V.E..... R.....ID 0,0-456,144} that was originally added here 
03-29 11:46:25.331: E/WindowManager(782): android.view.WindowLeaked: Activity com.mahdi.ftpconnect.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{40d27e80 V.E..... R.....ID 0,0-456,144} that was originally added here 
03-29 11:46:25.331: E/WindowManager(782): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:354) 
03-29 11:46:25.331: E/WindowManager(782): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216) 
03-29 11:46:25.331: E/WindowManager(782): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
03-29 11:46:25.331: E/WindowManager(782): at android.app.Dialog.show(Dialog.java:281) 
03-29 11:46:25.331: E/WindowManager(782): at com.mahdi.ftpconnect.MainActivity$connect.onPreExecute(MainActivity.java:80) 
03-29 11:46:25.331: E/WindowManager(782): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 
03-29 11:46:25.331: E/WindowManager(782): at android.os.AsyncTask.execute(AsyncTask.java:534) 
03-29 11:46:25.331: E/WindowManager(782): at com.mahdi.ftpconnect.MainActivity$1.onClick(MainActivity.java:53) 
03-29 11:46:25.331: E/WindowManager(782): at android.view.View.performClick(View.java:4204) 
03-29 11:46:25.331: E/WindowManager(782): at android.view.View$PerformClick.run(View.java:17355) 
03-29 11:46:25.331: E/WindowManager(782): at android.os.Handler.handleCallback(Handler.java:725) 
03-29 11:46:25.331: E/WindowManager(782): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-29 11:46:25.331: E/WindowManager(782): at android.os.Looper.loop(Looper.java:137) 
03-29 11:46:25.331: E/WindowManager(782): at android.app.ActivityThread.main(ActivityThread.java:5041) 
03-29 11:46:25.331: E/WindowManager(782): at java.lang.reflect.Method.invokeNative(Native Method) 
03-29 11:46:25.331: E/WindowManager(782): at java.lang.reflect.Method.invoke(Method.java:511) 
03-29 11:46:25.331: E/WindowManager(782): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
03-29 11:46:25.331: E/WindowManager(782): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
03-29 11:46:25.331: E/WindowManager(782): at dalvik.system.NativeStart.main(Native Method) 
+0

發佈完整的堆棧跟蹤 – Raghunandan

回答

1

你有

Toast.makeText(getParent(), "complete", Toast.LENGTH_LONG).show(); 

不能在doInbackground顯示敬酒。這是一個錯誤。你需要進一步發佈完整的堆棧跟蹤。

您可以使用runOnUiThread這是活動的方法或返回結果doInbackground並更新在ui線程上調用的onPostExecute中的ui。

+0

J'AI DIT EN浩特..我說在我的代碼中,當我將這段代碼放到一個類中並運行它時,沒有問題,但是在一個活動中,它不工作。 – user3425322

+0

E/AndroidRuntime(804):引起:java.lang.NullPointerException – user3425322

+0

注意:文本文件不是emty – user3425322

3
Toast.makeText(getParent(), "complete", Toast.LENGTH_LONG).show() 

你不能在doInBackground內運行Toast。使用HandlerrunOnUiThread,使UI線程顯示它,或者如正確地從@codeMagic指出,你應該使用onPostExecute回調運行UI東西

+0

但是,您不是故意在doInBackground()中使用runOnUiThread(),是否正確? – codeMagic

+0

只是發佈該行。在你看來這有什麼問題@codeMagic – Blackbelt

+0

就我個人而言,我剛剛看到從這裏的帖子中發現了很多錯誤。從技術上講,它可能工作,但我剛剛看到它造成了很多混亂和更多的錯誤。由於'AsyncTask'有處理這個問題的方法,所以這似乎是不好的做法,恕我直言。所以看起來,因爲OP已經設置了'AsyncTask',所以使用'onProgressUpdate()'或'onPostExecute()'是更好的解決方案 – codeMagic

相關問題