云南微网站建设的公司有哪些/seo优化排名技术百度教程
我网上搜索了到使用ganymed-ssh2-build210.jar来实现scp上传文件功能。我就不说具体的方法了。有些网友比我还认真写文档,写的比我漂亮多了。
问题一:
使用的时候,我发现总是连不上,我查看了一下日志,发现这个错误:2022-03-23 15:27:08.583 8013-8013/? W/System.err: Caused by: java.net.SocketException: socket failed: EACCES (Permission denied)
我网上搜了一下,网友说这样解决:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tradingstrategy">
添加这一行
<uses-permission android:name="android.permission.INTERNET"/>
<application
//...
</application>
</manifest>
果然,不会出现上面的错了。
问题二:
上面的问题解决后,运行一下,程序崩溃,出现下面的错误:
2022-03-23 16:56:03.380 14260-14260/com.tradingstrategy D/AndroidRuntime: Shutting down VM
2022-03-23 16:56:03.381 14260-14260/com.tradingstrategy E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.tradingstrategy, PID: 14260
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1450)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:355)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:357)
at java.net.Socket.connect(Socket.java:616)
at ch.ethz.ssh2.transport.TransportManager.establishConnection(TransportManager.java:340)
at ch.ethz.ssh2.transport.TransportManager.initialize(TransportManager.java:448)
at ch.ethz.ssh2.Connection.connect(Connection.java:643)
at ch.ethz.ssh2.Connection.connect(Connection.java:490)
at com.tradingstrategy.ui.utils.UtilsScp.connect(MyScp.java:49)
at com.tradingstrategy.ui.update.UpdateFragment.onClick(MyFragment.java:71)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
以前出现这些错误,都是一直点,直接跳到崩溃的地方,然后修改一下代码就可以了。现在点到最后也就是文件StrictMode.java的builder.penaltyLog();怎么办呢?我还找一下其他错误的地方,然后在百度里面搜索。最后也没搜到有用的信息。搞了一个小时左右,我突然灵光一现,根据我之前的经验,最后一行就是最后错误所在的地方,我拷贝at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1450)这行,到百度里面搜一下,结果有答案了。网上这样说:
android.os.NetworkOnMainThreadException是说不要在主线程中访问网络,这个应该是android4.0版本开始就强制不能在主线程中访问网络,要把访问网络放在
独立的线程中。如果一定要忽略这些强制策略问题的话,可以在onCreate()方法里面加上
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
我在我顶层Activity的onCreate()方法里面加上上面的代码。果然,不会崩溃了。
这样的坑都有啊,哎。还好,我这个多绝招的人还能勉强应付。