Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NetworkOnMainThreadExeption TCP连接作为链接任务_Java_Android_Web Services_Android Asynctask_Tcpclient - Fatal编程技术网

Java NetworkOnMainThreadExeption TCP连接作为链接任务

Java NetworkOnMainThreadExeption TCP连接作为链接任务,java,android,web-services,android-asynctask,tcpclient,Java,Android,Web Services,Android Asynctask,Tcpclient,我有一个问题,我正在尝试连接到我的本地tcp服务器,以上载图像。但是我不工作,我确实把这个连接变成了一个asinktask方法。有人知道我从哪里来吗 public class ComplexFTPTransfer extends AsyncTask<File, Long[], Void> { String server = "192.168.1.145"; int port = 21; @Override protected void onPr

我有一个问题,我正在尝试连接到我的本地tcp服务器,以上载图像。但是我不工作,我确实把这个连接变成了一个asinktask方法。有人知道我从哪里来吗

public class ComplexFTPTransfer extends AsyncTask<File, Long[], Void>
{



    String server = "192.168.1.145";
    int port = 21;

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

        try {
            ftpClient = new FTPClient();
            ftpClient.connect(server, port);
            ftpClient.login("marc", "1234");
            ftpClient.enterLocalPassiveMode();

            System.out.println("!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        } catch (SocketException e) {
            this.cancel(true);
        } catch (IOException e) {
            this.cancel(true);
        }

        CameraActivity.this.setProgressBarIndeterminateVisibility(true);

    }


    @Override
    protected Void doInBackground(File... params) {
        if(!this.isCancelled())
        {
            try 
            {

                InputStream item = null;

                try {
                    item = new FileInputStream(params[0]);
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }


                int streamSize = 0;
                while(item.read() != -1)
                {
                    streamSize++;
                }

                InputStream is = new BufferedInputStream(item, streamSize);
                OutputStream os = ftpClient.storeFileStream("/test.jpg");

                Util.copyStream(is, os, streamSize, streamSize, new CopyStreamListener() {

                    @Override
                    public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) {
                        publishProgress(new Long[] {totalBytesTransferred, streamSize});
                    }

                    @Override
                    public void bytesTransferred(CopyStreamEvent event) {

                    }
                });
                ftpClient.completePendingCommand();

                ftpClient.logout();
                ftpClient.disconnect();

            }
            catch (IOException e) {

            }
            catch (Exception e) {

            }
        }
        return null;
    }


    @Override
    protected void onProgressUpdate(Long[]... values) {
        super.onProgressUpdate(values);
        Log.d("UPDATE", values[0] + " of " + values[1] + " copied.");
        //TODO Put code here
    }

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        CameraActivity.this.setProgressBarIndeterminateVisibility(false);
    }
}
谢谢大家。
很抱歉我的英语错误

您需要将所有网络代码移动到异步任务
doInBackground()
。目前,在主UI线程上运行的
onPreExecute()
中有
ftpClient
设置网络代码。

您需要将所有网络代码移动到异步任务
doInBackground()
。目前,在主UI线程上运行的
onPreExecute()
中有
ftpClient
设置网络代码

  ftpClient.connect(server, port);
  ftpClient.login("marc", "1234");
需要网络交互,并且由于您在onPreExecute中执行这些操作,而onPreExecute又在UI线程上运行,因此会抛出
NetworkOnMainThreadExecute选项。你也应该把所有与网络相关的东西都搬到后台

  ftpClient.connect(server, port);
  ftpClient.login("marc", "1234");

需要网络交互,并且由于您在onPreExecute中执行这些操作,而onPreExecute又在UI线程上运行,因此会抛出
NetworkOnMainThreadExecute选项。您应该在
doInBackground

中移动所有与网络相关的内容。请尝试以下代码,我已从onPreexecute中删除了网络调用,并将其添加到doInBackground中。不能在UI线程中调用网络方法

public class ComplexFTPTransfer extends AsyncTask<File, Long[], Void>

}

试试下面的代码,我已经从onPreexecute中删除了网络呼叫,并将其添加到doInBackground中。不能在UI线程中调用网络方法

public class ComplexFTPTransfer extends AsyncTask<File, Long[], Void>
}

String server = "192.168.1.145";
int port = 21;

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

    CameraActivity.this.setProgressBarIndeterminateVisibility(true);

}


@Override
protected Void doInBackground(File... params) {
  try {
        ftpClient = new FTPClient();
        ftpClient.connect(server, port);
        ftpClient.login("marc", "1234");
        ftpClient.enterLocalPassiveMode();

        System.out.println("!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
    } catch (SocketException e) {
        this.cancel(true);
    } catch (IOException e) {
        this.cancel(true);
    }


    if(!this.isCancelled())
    {
        try 
        {

            InputStream item = null;

            try {
                item = new FileInputStream(params[0]);
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            int streamSize = 0;
            while(item.read() != -1)
            {
                streamSize++;
            }

            InputStream is = new BufferedInputStream(item, streamSize);
            OutputStream os = ftpClient.storeFileStream("/test.jpg");

            Util.copyStream(is, os, streamSize, streamSize, new CopyStreamListener() {

                @Override
                public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) {
                    publishProgress(new Long[] {totalBytesTransferred, streamSize});
                }

                @Override
                public void bytesTransferred(CopyStreamEvent event) {

                }
            });
            ftpClient.completePendingCommand();

            ftpClient.logout();
            ftpClient.disconnect();

        }
        catch (IOException e) {

        }
        catch (Exception e) {

        }
    }
    return null;
}


@Override
protected void onProgressUpdate(Long[]... values) {
    super.onProgressUpdate(values);
    Log.d("UPDATE", values[0] + " of " + values[1] + " copied.");
    //TODO Put code here
}

@Override
protected void onPostExecute(Void result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);
    CameraActivity.this.setProgressBarIndeterminateVisibility(false);
}