Java NetworkOnMainThreadExeption TCP连接作为链接任务
我有一个问题,我正在尝试连接到我的本地tcp服务器,以上载图像。但是我不工作,我确实把这个连接变成了一个asinktask方法。有人知道我从哪里来吗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
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);
}