作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到问题,我正在尝试连接到本地 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/
我遇到问题,我正在尝试连接到本地 TCP 服务器以上传图像。但我不工作,我确实将连接建立到了 asinktask 方法中。有人知道我从哪里来吗? public class ComplexFTPTran
我是一名优秀的程序员,十分优秀!