gpt4 book ai didi

java - NetworkOnMainThreadException TCP 连接 AsinkTask

转载 作者:行者123 更新时间:2023-12-01 18:26:58 27 4
gpt4 key购买 nike

我遇到问题,我正在尝试连接到本地 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);
}
}

这是方法,

我在 Activity 结果中调用了它

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) return;

Bitmap bitmap;

String path= "";
if (requestCode == PICK_FROM_FILE) {

mImageCaptureUri = data.getData();

path = getRealPathFromURI(mImageCaptureUri); //from Gallery

Log.i("Here", "Here we are");
if (path == null)

path = mImageCaptureUri.getPath(); //from File Manager

if (path != null)
Log.i("Here", path);
bitmap = BitmapFactory.decodeFile(path);
} else {
path = mImageCaptureUri.getPath();
bitmap = BitmapFactory.decodeFile(path);
}



/*
Mat gray_img = new Mat();
Mat rgb_img = new Mat();

Utils.bitmapToMat(bitmap, rgb_img);
Imgproc.cvtColor(rgb_img, gray_img, Imgproc.COLOR_RGBA2GRAY);
FeatureDetector surfDetector = FeatureDetector.create(FeatureDetector.ORB);
DescriptorExtractor surfDescriptor = DescriptorExtractor.create(DescriptorExtractor.ORB);


Vector<Mat> surfDescriptors = new Vector<Mat>();
MatOfKeyPoint vector = new MatOfKeyPoint();
Mat descriptor = new Mat();
surfDetector.detect( rgb_img, vector );
surfDescriptor.compute(rgb_img, vector, descriptor);
surfDescriptors.add(descriptor);
String [] stringSurf = surfDescriptors.toArray(new String[0]);

*/

File firstLocalFile = new File(mImageCaptureUri.getPath());








ftpTransfert = new ComplexFTPTransfer();
ftpTransfert.execute(firstLocalFile);


networktask = new NetworkTask();
networktask.execute();


mImageView.setImageBitmap(bitmap);

}

这是我的日志错误:

 09-11 15:41:49.640: W/dalvikvm(17995): threadid=1: thread exiting with uncaught exception 
09-11 15:41:49.640: E/AndroidRuntime(17995): FATAL EXCEPTION: main
09-11 15:41:49.640: E/AndroidRuntime(17995): Process: com.test.camera_zero, PID: 17995
09-11 15:41:49.640: E/AndroidRuntime(17995): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.test.camera_zero/com.test.camera_zero.CameraActivity}: android.os.NetworkOnMainThreadException
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.app.ActivityThread.deliverResults(ActivityThread.java:3351)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3394)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.app.ActivityThread.access$1300(ActivityThread.java:135)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.os.Handler.dispatchMessage(Handler.java:102)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.os.Looper.loop(Looper.java:136)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.app.ActivityThread.main(ActivityThread.java:5001)
09-11 15:41:49.640: E/AndroidRuntime(17995): at java.lang.reflect.Method.invokeNative(Native Method)
09-11 15:41:49.640: E/AndroidRuntime(17995): at java.lang.reflect.Method.invoke(Method.java:515)
09-11 15:41:49.640: E/AndroidRuntime(17995): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-11 15:41:49.640: E/AndroidRuntime(17995): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-11 15:41:49.640: E/AndroidRuntime(17995): at dalvik.system.NativeStart.main(Native Method)
09-11 15:41:49.640: E/AndroidRuntime(17995): Caused by: android.os.NetworkOnMainThreadException
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
09-11 15:41:49.640: E/AndroidRuntime(17995): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
09-11 15:41:49.640: E/AndroidRuntime(17995): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
09-11 15:41:49.640: E/AndroidRuntime(17995): at libcore.io.IoBridge.connect(IoBridge.java:112)
09-11 15:41:49.640: E/AndroidRuntime(17995): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-11 15:41:49.640: E/AndroidRuntime(17995): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
09-11 15:41:49.640: E/AndroidRuntime(17995): at java.net.Socket.connect(Socket.java:843)
09-11 15:41:49.640: E/AndroidRuntime(17995): at org.apache.commons.net.SocketClient.connect(SocketClient.java:182)
09-11 15:41:49.640: E/AndroidRuntime(17995): at org.apache.commons.net.SocketClient.connect(SocketClient.java:203)
09-11 15:41:49.640: E/AndroidRuntime(17995): at com.test.camera_zero.CameraActivity$ComplexFTPTransfer.onPreExecute(CameraActivity.java:401)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.os.AsyncTask.execute(AsyncTask.java:535)
09-11 15:41:49.640: E/AndroidRuntime(17995): at com.test.camera_zero.CameraActivity.onActivityResult(CameraActivity.java:203)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.app.Activity.dispatchActivityResult(Activity.java:5423)
09-11 15:41:49.640: E/AndroidRuntime(17995): at android.app.ActivityThread.deliverResults(ActivityThread.java:3347)
09-11 15:41:49.640: E/AndroidRuntime(17995): ... 11 more

`

谢谢大家。抱歉我的英语错误

最佳答案

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

关于java - NetworkOnMainThreadException TCP 连接 AsinkTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25787897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com