致命异常主要android
Posted
技术标签:
【中文标题】致命异常主要android【英文标题】:FATAL Exception Main android 【发布时间】:2012-09-08 23:54:08 【问题描述】:我收到 FATAL Exception 主要错误。有什么帮助吗?
代码如下:
private void copyStream(String assetFilename, String 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):FATAL EXCEPTION: main 09-16 19: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):at android.view.View.performClick(View.java:2485) 09-16 19:52:26.654: E/Android运行时(294):在 android.view.View$PerformClick.run(View.java:9080) 09-16 19:52:26.654: E/Android运行时(294):在 android.os.Handler.handleCallback(Handler.java:587) 09-16 19:52:26.654: E/AndroidRuntime(294):at android.os.Handler.dispatchMessage(Handler.java:92) 09-16 19:52:26.654: E/AndroidRuntime(294):at android.os.Looper.loop(Looper.java:123) 09-16 19:52:26.654: E/Android运行时(294):在 android.app.ActivityThread.main(ActivityThread.java:3683) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.lang.reflect.Method.invokeNative(Native Method) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.lang.reflect.Method.invoke(Method.java:507) 09-16 19:52:26.654: E/Android运行时(294):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 09-16 19:52:26.654: E/AndroidRuntime(294):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 09-16 19:52:26.654: E/AndroidRuntime(294):at 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):at java.lang.reflect.Method.invoke(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-16 19:52:26.654:E/AndroidRuntime(294):引起:java.io.IOException: 断管 09-16 19:52:26.654: E/AndroidRuntime(294): at org.apache.harmony.luni.platform.OSFileSystem.write(本机方法) 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):at java.io.FileOutputStream.write(FileOutputStream.java:300) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.io.FileOutputStream.write(FileOutputStream.java:256) 09-16 19:52:26.654: E/AndroidRuntime(294):at java.io.DataOutputStream.writeBytes(DataOutputStream.java:167)
【问题讨论】:
我面临同样的问题.. 但是如果我将“su”更改为“sh”那么它可以工作(至少不要引发破管异常) 【参考方案1】:异常的基础似乎来自“FileOutputStream.write”,您是否已将写入权限添加到您的清单?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
【讨论】:
【参考方案2】:在你的 mainfest 中添加这个权限。我希望它对你有用,你应该初始化这个对象。在你的代码中,你给上下文值 null 这就是它不起作用的原因。
/** 需要一些 Intilization 而不是 null
ContextWrapper myContext = null;
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
【讨论】:
/** 需要一些 Intilization 而不是 null ContextWrapper myContext = null; 我将 ContextWrapper myContext = null 改为私有 ContextWrapper myContext; 甚至删除了 myContext,仍然没有解决方案。 初始化你的 ContextWrapper,比如 ContextWrapper myContext=new ContextWrapper();【参考方案3】:请使用 AsyncTask 或 Thread。 如果你写了自己的方法,你可以这样使用:
new Thread(
new Runnable()
@Override
public void run()
copyStream();
);
或使用 AsyncTask
【讨论】:
【参考方案4】:默认情况下,您没有/system/etc
的写入权限,(除非您对您的设备进行了一些破解)。改成Environment.getExternalStorageDirectory().getPath() + "/folderName/excluded-input-devices.xml"
【讨论】:
【参考方案5】:您正在线程内调用 onClick 方法。这是不可能的,因为视图位于主线程中,无法从任何其他线程访问它们。
【讨论】:
以上是关于致命异常主要android的主要内容,如果未能解决你的问题,请参考以下文章
致命异常:主要 java.lang.NoClassDefFoundError:android.support.v7.internal.widget.TintManager