我收到致命异常主错误。有什么帮助吗?
这是代码:
private void copyStream(字符串assetFilename,字符串outFileName)引发IOException{
Process mSuProcess; mSuProcess = Runtime.getRuntime().exec("su"); ContextWrapper myContext = null; InputStream myInput = myContext.getAssets().open(assetFilename); OutputStream myOutput = new FileOutputStream(outFileName); //transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[2048]; int length; while ((length = myInput.read(buffer))>0){ myOutput.write(buffer, 0, length); } //Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void copyon(View view) throws IOException { copyStream("floaton.xml","/system/etc/excluded-input-devices.xml"); } public void copyoff(View view) throws IOException { copyStream("floatoff.xml","/system/etc/excluded-input-devices.xml"); }
和logcat
09-16 19:52:26.654:E/AndroidRuntime(294):致命异常:main 09-1619:52:26.654:E/AndroidRuntime(294):java.lang.IllegalStateException:无法执行活动的方法09-16 19:52:26.654:E/AndroidRuntime(294):在android.view.view$1.onClick(view.java:2144)09-16 19:52:26.654:E/AndroidRuntime(294):在android.view.view.performClick(view.java:2485)09-16 19:52:26.654:E/AndroidRuntime(294):在android.view.view$PerformClick.run(view.java:9080)09-16 19:52:26.654:E/AndroidRuntime(294):在android.os.Handler.handleCallback(Handler.java:587)09-1619:52:26.654:E/AndroidRuntime(294):在android.os.Handler.dispatchMessage(Handler.java:92)09-1619:52:26.654:E/AndroidRuntime(294):在android.os.Looper.loop(Looper.java:123)09-16 19:52:26.654:E/AndroidRuntime(294):在android.app.ActivityThread.main(ActivityThreads.java:3683)09-1619:52:26.654:E/AndroidRuntime(294):在java.lang.reflect.Method.invokeNative(Native Method)09-1619:52:26.654:E/AndroidRuntime(294):在java.lang.reflect.Method.ioke(Method.java:507)09-16 19:52:26.654:E/AndroidRuntime(294):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)09-16 19:52:26.654:E/AndroidRuntime(294):在com.android.internal.os.ZygoteInit.main(ZygoteNit.java:597)09-1619:52:26.654:E/AndroidRuntime(294):在dalvik.system.NativeStart.main(本地方法)09-16 19:52:26.654:E/AndroidRuntime(294):由以下原因引起:java.lang.reflect.InvocationTargetException 09-16 19:52:26.654:E/AndroidRuntime(294):位于java.lang.reflect.Method.invokeNative(Native方法)09-16 19:52:26.654:E/AndroidRuntime(294):在java.lang.reflect.Method.ioke(Method.java:507)09-16 19:52:26.654:E/AndroidRuntime(294):在android.view.view$1.onClick(view.java:2139)09-16 19:52:26.654:E/AndroidRuntime(294):。。。11更多09-1619:52:26.654:E/AndroidRuntime(294):由java.io.io引起异常:管道破裂09-16 19:52:26.654:E/AndroidRuntime(294):在org.apache.heamony.luni.platform.OSFileSystem.write(Native Method)09-16 19:52:26.654:E/AndroidRuntime(294):在dalvik.system.BlockGuard$WrappedFileSystem.write(BlockGuard.java:171)09-16 19:52:26.654:E/AndroidRuntime(294):在java.io.FileOutputStream.write(FileOutputStream.java:300)09-1619:52:26.654:E/AndroidRuntime(294):在java.io.FileOutputStream.write(FileOutputStream.java:256)09-1619:52:26.654:E/AndroidRuntime(294):在java.io.DataOutputStream.writeBytes(DataOutputStream.java:167)
异常的基础似乎来自"FileOutputStream.write",您是否已将写入权限添加到清单中?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在您的主节中添加此权限。我希望它能为你工作;u应该初始化这个对象。在您的代码中,您将上下文值设置为null,这就是它不起作用的原因。
/**需要一些初始化而不是空
ContextWrapper myContext=null;
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
请使用AsyncTask或Thread。如果你写了自己的方法,你可以这样使用:
new Thread(
new Runnable() {
@Override
public void run() {
copyStream();
}
}
);
OR使用AsyncTask
默认情况下,您对/system/etc
没有写入权限(除非您对设备进行了一些黑客攻击)。将其更改为Environment.getExternalStorageDirectory().getPath() + "/folderName/excluded-input-devices.xml"
您正在线程内调用onClick方法。这是不可能的,因为视图在主线程中,不能从任何其他线程访问。