以上就是给各位分享Python-什么是错误的幻数错误?,其中也会对python中的错误类型进行解释,同时本文还将给你拓展java–无效文件(错误的幻数):exec格式错误、Pythonctypes参数
以上就是给各位分享Python-什么是错误的幻数错误?,其中也会对python中的错误类型进行解释,同时本文还将给你拓展java – 无效文件(错误的幻数):exec格式错误、Python ctypes参数错误、Python MySQL错误的架构错误、python super参数错误等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- Python-什么是错误的幻数错误?(python中的错误类型)
- java – 无效文件(错误的幻数):exec格式错误
- Python ctypes参数错误
- Python MySQL错误的架构错误
- python super参数错误
Python-什么是错误的幻数错误?(python中的错误类型)
什么是python中的“错误的魔术数字” ImportError
,如何解决?
我只能在网上找到的唯一东西表明,这是由于编译.py-> .pyc
文件,然后尝试将其与错误版本的python一起使用而引起的。但是,就我而言,该文件似乎有时可以很好地导入,而其他时候则不能,并且我不确定为什么。
python在回溯中提供的信息并不是特别有用(这就是为什么我在这里询问…的原因),但在这里是有帮助的:
Traceback (most recent call last): File "run.py", line 7, in <module> from Normalization import Normalizer
答案1
小编典典幻数来自UNIX类型的系统,其中文件的前几个字节包含一个指示文件类型的标记。
Python pyc
在创建文件时会将类似的标记放入其文件中。
然后,python解释器会在加载时确保此数字正确。
任何损坏此幻数的东西都会引起你的问题。这包括编辑pyc
文件或尝试pyc
从解释器以外的其他版本的python(通常更高版本)运行。
如果它们是你的 pyc
文件,只需删除它们,然后让解释器重新编译py文件。在UNIX类型的系统上,这可能很简单:
rm *.pyc
要么:
find . -name ''*.pyc'' -delete
如果它们不是你的py文件,则必须获取文件以进行重新编译,或者必须具有可以pyc使用该特定魔术值运行文件的解释器。
一件事可能导致间歇性。该pyc是造成该问题可能只在一定条件下进口。有时不太可能导入。导入失败时,你应该检查实际的完整堆栈跟踪吗?
顺便说一句,我所有2.5.1(r251:54863) pyc
文件的第一个单词是62131,2.6.1(r261:67517)
是62161
。完整的幻数列表可在中找到Python/import.c
,为完整起见,请在此处复制(截至发布答案时为最新,此后可能已更改):
1.5: 201211.5.1: 201211.5.2: 201211.6: 504282.0: 508232.0.1: 508232.1: 602022.1.1: 602022.1.2: 602022.2: 607172.3a0: 620112.3a0: 620212.3a0: 620112.4a0: 620412.4a3: 620512.4b1: 620612.5a0: 620712.5a0: 620812.5a0: 620912.5a0: 620922.5b3: 621012.5b3: 621112.5c1: 621212.5c2: 621312.6a0: 621512.6a1: 621612.7a0: 62171
java – 无效文件(错误的幻数):exec格式错误
[root@a admin]# export CLAsspATH=/home/admin/TagAPI/lib/org.json-20120521.jar ;/home/admin/TagAPI/lib/testng-6.8.21.jar invalid file (bad magic number): Exec format error
任何建议都会有所帮助.我是java和linux的新手,谢谢!
解决方法
export CLAsspATH=/home/admin/TagAPI/lib/org.json-20120521.jar:/home/admin/TagAPI/lib/testng-6.8.21.jar
;是命令分隔符.
Python ctypes参数错误
我用C
++编写了一个测试dll,以确保一切正常,然后再开始使用所需的更重要的dll。基本上需要两个双打并将其相加,然后返回结果。我一直在玩,并与其他测试功能一起工作,但由于错误我无法传递参数。我的代码是:
import ctypes
import string
nDLL = ctypes.WinDLL('test.dll')
func = nDLL['haloshg_add']
func.restype = ctypes.c_double
func.argtypes = (ctypes.c_double,ctypes.c_double)
print(func(5.0,5.0))
它返回名为“ func”的行的错误:
ValueError: Procedure probably called with too many arguments (8 bytes in excess)
我究竟做错了什么?谢谢。
Python MySQL错误的架构错误
我已经来了一段时间,并阅读了许多有关该主题的网站。怀疑我有垃圾造成了这个问题。但是哪里?
当我在python中导入MySQLdb时,这是错误:
>>> import MySQLdb
/Library/Python/2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /Library/Python/2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg/_mysql.pyc,but /Users/phoebebr/Downloads/MySQL-python-1.2.3c1 is being added to sys.path
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "MySQLdb/__init__.py",line 19,in <module>
import _mysql
File "build/bdist.macosx-10.6-universal/egg/_mysql.py",line 7,in <module>
File "build/bdist.macosx-10.6-universal/egg/_mysql.py",line 6,in __bootstrap__
ImportError: dlopen(/Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so,2): no suitable image found. Did find:
/Users/phoebebr/.python-eggs/MySQL_python-1.2.3c1-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so: mach-o,but wrong architecture
我正在尝试64位,所以在这里检查:
file $(which python)
/usr/bin/python: Mach-O universal binary with 3 architectures
/usr/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386): Mach-O executable i386
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc
file $(which mysql)
/usr/local/mysql/bin/mysql: Mach-O 64-bit executable x86_64
已将python的默认版本设置为2.6
python
Python 2.6.1 (r261:67515,Feb 11 2010,00:51:29)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
尝试删除构建目录和python setup.py clean重命名为Python / 2.5 / site-packages,使其无法尝试提取它。
更新
删除所有内容,并按照此处的说明进行操作: Mac OS 10.6.2上的Django +
MySQL使用Macports安装Snow
Leopard。
但是基本上还是会得到同样的错误
Traceback (most recent call last):
File "<stdin>",in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/__init__.py",in <module>
import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_mysql.so,2): no suitable image found. Did find:
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/_mysql.so: mach-o,but wrong architecture
>>>
python super参数错误
# -*- coding:utf-8 _*-
"""
@author:Administrator
@file: yamlparser.py
@time: 2018/09/07
"""
class A(object):
"""
Method resolution order是python用来解析方法调用顺序的。
MRO对于多重继承中方法调用异常重要。python中有一个内建函
数和MRO密切相关——super.super不是简单地调用所谓基类的方法,
而是调用MRO中的下一个类的方法,也就是类似于next的方法。
"""
def __init__(self):
print("A")
super(A, self).__init__() # --D
class B(object):
def __init__(self):
print("B")
super(B, self).__init__()
class C(A):
def __init__(self, *args):
print("c", "arg=", args)
super(C, self).__init__() # --A
class D(B):
def __init__(self, *args):
print("D", "arg=", args)
super(D, self).__init__()
class E(C, D):
def __init__(self, *args,**kwargs):
print("E", "arg=", args)
super(E, self).__init__(*args,**kwargs) # E -->C
print("MRO", [x.__name__ for x in E.__mro__])
E(10)
今天关于Python-什么是错误的幻数错误?和python中的错误类型的介绍到此结束,谢谢您的阅读,有关java – 无效文件(错误的幻数):exec格式错误、Python ctypes参数错误、Python MySQL错误的架构错误、python super参数错误等更多相关知识的信息可以在本站进行查询。
在本文中,我们将为您详细介绍为什么onResume的相关知识,并且为您解答关于似乎被调用了两次?的疑问,此外,我们还会提供一些关于Android M权限:onRequestPermissionsResult()未被调用、Android oncreateview调用了两次、android – onSurfaceChanged调用了两次、android – 为什么onLayout和onSizeChanged在方向更改时被调用两次?的有用信息。
本文目录一览:- 为什么onResume()似乎被调用了两次?
- Android M权限:onRequestPermissionsResult()未被调用
- Android oncreateview调用了两次
- android – onSurfaceChanged调用了两次
- android – 为什么onLayout和onSizeChanged在方向更改时被调用两次?
为什么onResume()似乎被调用了两次?
我的活动课在这里:
public class CameraActivity extends Activity {private Camera mCamera;private CameraPreview mPreview;public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // startCamera();}public void startCamera() { setContentView(R.layout.camera_view); mCamera = getCameraInstance();// Open Camera mPreview = new CameraPreview(this,mCamera);// Goto Another Class FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); preview.setLayoutParams(new FrameLayout.LayoutParams(400,400)); //Declare Frame in which camera will be opened preview.addView(mPreview); // show this class into frame}protected void onResume() { super.onResume(); Log.d("Print","resume()"); startCamera();}public static Camera getCameraInstance() { Camera c = null; try { c = Camera.open(); // attempt to get a Camera instance } catch (Exception e) { Toast.makeText(null,"No camera on this device",Toast.LENGTH_LONG).show(); // Camera is not available (in use or does not exist) } return c; // returns null if camera is unavailable}/*protected void onPause() { if (mCamera!=null) { mCamera.release(); // release the camera for other applications mCamera = null; } super.onPause(); }*/}
和相机预览类在这里:
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {private SurfaceHolder mHolder;private Camera mCamera;@SuppressWarnings("deprecation")public CameraPreview(Context context, Camera camera) { super(context); mCamera = camera; mHolder = getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}public void surfaceCreated(SurfaceHolder holder) { try { mCamera.setPreviewDisplay(holder); mCamera.startPreview(); } catch (IOException e) { Log.d("Print","Error setting camera preview: "+e.getMessage()); }}public void surfaceDestroyed(SurfaceHolder holder) { Log.d("Print","Destroyed()"); mCamera.stopPreview(); mCamera.release(); // empty. Take care of releasing the Camera preview in your activity.}public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { if (mHolder.getSurface()==null) { return; } try { mCamera.stopPreview(); } catch (Exception e) { // ignore: tried to stop a non-existent preview } try { mCamera.setPreviewDisplay(mHolder); mCamera.startPreview(); } catch (Exception e) { Log.d("Print","Error starting camera preview: "+e.getMessage()); }}}
但是,当我测试该类时,似乎首先调用onResume(),然后在1或2秒后再次调用。因此,相机必须再次刷新。如果我根本没有onResume(),则摄像头预览稳定,但是如果我从主屏幕或其他某个应用再次切换到该应用,则会崩溃。我发现onPause()不会影响任何一个。我的代码正确吗?我应该添加/删除哪些内容以使其不会再次刷新并且在应用切换后仍然不会崩溃?
这是从第一个onResume()到另一个的LogCat输出:
12-19 22:58:27.604: D/Print(28831): resume()12-19 22:58:27.624: D/dalvikvm(29223): GC_CONCURRENT freed 195K, 8% free 3591K/3864K, paused 2ms+1ms, total 9ms12-19 22:58:27.634: D/dalvikvm(29223): GC_FOR_ALLOC freed 245K, 10% free 3667K/4068K, paused 6ms, total 7ms12-19 22:58:27.644: D/dalvikvm(29223): GC_FOR_ALLOC freed 241K, 11% free 3742K/4164K, paused 6ms, total 7ms12-19 22:58:27.649: I/AwesomePlayer(13841): setDataSource_l(URL suppressed)12-19 22:58:27.659: I/AwesomePlayer(13841): setDataSource_l(URL suppressed)12-19 22:58:27.674: D/dalvikvm(29223): GC_CONCURRENT freed 255K, 8% free 3908K/4240K, paused 1ms+0ms, total 9ms12-19 22:58:27.674: I/Camera2ClientBase(13841): Camera 0: Opened12-19 22:58:27.674: D/ExynosCameraHAL2(13841): >>> I''m Samsung''s CameraHAL_2(ID:0) <<<12-19 22:58:27.674: D/ExynosCameraHAL2(13841): g_cam2_device : 0x0000000012-19 22:58:27.674: D/ExynosCameraHAL2(13841): (ExynosCameraHWInterface2): ENTER12-19 22:58:27.789: D/dalvikvm(29223): GC_CONCURRENT freed 210K, 6% free 4151K/4416K, paused 2ms+7ms, total 50ms12-19 22:58:27.854: D/dalvikvm(29223): GC_CONCURRENT freed 281K, 8% free 4336K/4676K, paused 1ms+1ms, total 11ms12-19 22:58:27.879: D/ExynosCameraHAL2(13841): (ExynosCameraHWInterface2): EXIT12-19 22:58:27.904: D/gamook(29223): Loaded 66 configuration entries.12-19 22:58:27.914: D/dalvikvm(29223): GC_CONCURRENT freed 399K, 10% free 4447K/4908K, paused 1ms+4ms, total 27ms12-19 22:58:27.914: D/dalvikvm(29223): WAIT_FOR_CONCURRENT_GC blocked 1ms12-19 22:58:27.934: D/mali_winsys(28831): new_window_surface returns 0x300012-19 22:58:27.964: D/ExynosCameraHAL2(13841): (allocateStream): stream width(1920) height(1080) format(22)12-19 22:58:27.969: D/ExynosCameraHAL2(13841): (registerStreamBuffers): stream_id(0), num_buff(8), handle(b8683a48) 12-19 22:58:27.974: D/ExynosCameraHAL2(13841): (allocateStream): stream width(2560) height(1920) format(21)12-19 22:58:28.009: D/dalvikvm(29223): GC_CONCURRENT freed 279K, 8% free 4608K/4988K, paused 2ms+2ms, total 22ms12-19 22:58:28.039: D/ExynosCameraHAL2(13841): (registerStreamBuffers): stream_id(4), num_buff(6), handle(b85aabd8) 12-19 22:58:28.039: D/ExynosCameraHAL2(13841): (allocateStream): stream width(2560) height(1920) format(ffffffff)12-19 22:58:28.039: D/ExynosCameraHAL2(13841): (allocateStream): jpeg stream exists12-19 22:58:28.039: D/ExynosCameraHAL2(13841): START stream thread 1 release 186912-19 22:58:28.049: D/ExynosCameraHAL2(13841): END stream thread 1 release 187412-19 22:58:28.064: D/dalvikvm(29223): GC_CONCURRENT freed 320K, 8% free 4694K/5076K, paused 3ms+2ms, total 18ms12-19 22:58:28.139: D/dalvikvm(29223): GC_CONCURRENT freed 452K, 10% free 4697K/5212K, paused 3ms+2ms, total 30ms12-19 22:58:28.184: D/ExynosCameraHAL2(13841): (registerStreamBuffers): stream_id(5), num_buff(11), handle(b855dc30) 12-19 22:58:28.199: D/dalvikvm(29223): GC_CONCURRENT freed 433K, 10% free 4775K/5268K, paused 2ms+2ms, total 29ms12-19 22:58:28.199: D/ExynosCameraHAL2(13841): (allocateReprocessStreamFromStream): output_stream_id(5)12-19 22:58:28.249: D/dalvikvm(29223): GC_CONCURRENT freed 513K, 11% free 4828K/5400K, paused 1ms+1ms, total 16ms12-19 22:58:28.249: D/dalvikvm(29223): WAIT_FOR_CONCURRENT_GC blocked 5ms12-19 22:58:28.294: D/dalvikvm(29223): GC_CONCURRENT freed 528K, 11% free 4884K/5472K, paused 2ms+0ms, total 17ms12-19 22:58:28.294: D/dalvikvm(29223): WAIT_FOR_CONCURRENT_GC blocked 3ms12-19 22:58:28.344: D/dalvikvm(29223): GC_CONCURRENT freed 601K, 12% free 4888K/5548K, paused 2ms+1ms, total 19ms12-19 22:58:28.344: D/dalvikvm(29223): WAIT_FOR_CONCURRENT_GC blocked 7ms12-19 22:58:28.389: D/dalvikvm(29223): GC_CONCURRENT freed 616K, 13% free 4857K/5548K, paused 0ms+1ms, total 17ms12-19 22:58:28.399: D/ExynosCameraHAL2(13841): ### Applying AF Mode change(Mode 2) 12-19 22:58:28.404: D/dalvikvm(29223): GC_FOR_ALLOC freed 17K, 13% free 4843K/5548K, paused 14ms, total 14ms12-19 22:58:28.404: I/dalvikvm-heap(29223): Grow heap (frag case) to 4.823MB for 39033-byte allocation12-19 22:58:28.419: D/dalvikvm(29223): GC_FOR_ALLOC freed <1K, 13% free 4881K/5588K, paused 15ms, total 15ms12-19 22:58:28.434: D/dalvikvm(29223): GC_FOR_ALLOC freed <1K, 13% free 4881K/5588K, paused 19ms, total 19ms12-19 22:58:28.439: I/dalvikvm-heap(29223): Grow heap (frag case) to 4.897MB for 78050-byte allocation12-19 22:58:28.454: D/ExynosCameraHAL2(13841): DEBUG(m_mainThreadFunc)(0x10): No more service requests left in the queue 12-19 22:58:28.459: D/dalvikvm(29223): GC_FOR_ALLOC freed 0K, 13% free 4957K/5668K, paused 24ms, total 24ms12-19 22:58:28.529: D/dalvikvm(29138): GC_CONCURRENT freed 359K, 11% free 3745K/4168K, paused 1ms+1ms, total 13ms12-19 22:58:28.559: D/dalvikvm(29113): GC_CONCURRENT freed 378K, 11% free 3991K/4436K, paused 2ms+1ms, total 14ms12-19 22:58:28.634: D/dalvikvm(29223): GC_CONCURRENT freed 463K, 12% free 5023K/5668K, paused 3ms+2ms, total 20ms12-19 22:58:28.639: I/Choreographer(28831): Skipped 43 frames! The application may be doing too much work on its main thread.12-19 22:58:28.704: I/ActivityManager(447): Process com.google.android.apps.plus (pid 28888) has died.12-19 22:58:28.719: I/ActivityManager(447): Process com.google.process.gapps (pid 28963) has died.12-19 22:58:28.734: I/ActivityManager(447): Displayed com.example.dif/.CameraActivity: +1s138ms12-19 22:58:28.804: I/ActivityManager(447): Process com.facebook.katana:dash (pid 29014) has died.12-19 22:58:28.864: I/ActivityManager(447): Start proc com.estrongs.android.pop for broadcast com.estrongs.android.pop/.app.InstallMonitorReceiver: pid=29263 uid=10096 gids={50096, 3003, 3002, 3001, 1028, 1015}12-19 22:58:28.989: W/System.err(29263): java.lang.NoSuchMethodException: setCompatibilityInfo [class android.content.res.CompatibilityInfo$1]12-19 22:58:28.994: W/System.err(29263): at java.lang.Class.getConstructorOrMethod(Class.java:472)12-19 22:58:28.994: W/System.err(29263): at java.lang.Class.getMethod(Class.java:857)12-19 22:58:28.994: W/System.err(29263): at com.estrongs.android.util.af.a(Unknown Source)12-19 22:58:28.994: W/System.err(29263): at com.estrongs.android.util.af.a(Unknown Source)12-19 22:58:28.994: W/System.err(29263): at com.estrongs.android.pop.esclasses.i.<init>(Unknown Source)12-19 22:58:28.994: W/System.err(29263): at com.estrongs.android.pop.esclasses.i.a(Unknown Source)12-19 22:58:28.994: W/System.err(29263): at com.estrongs.android.pop.FexApplication.getResources(Unknown Source)12-19 22:58:28.994: W/System.err(29263): at com.estrongs.android.ui.b.a.a(Unknown Source)12-19 22:58:28.994: W/System.err(29263): at com.estrongs.android.pop.FexApplication.onCreate(Unknown Source)12-19 22:58:28.994: W/System.err(29263): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)12-19 22:58:28.994: W/System.err(29263): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4344)12-19 22:58:28.994: W/System.err(29263): at android.app.ActivityThread.access$1500(ActivityThread.java:135)12-19 22:58:28.994: W/System.err(29263): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)12-19 22:58:28.994: W/System.err(29263): at android.os.Handler.dispatchMessage(Handler.java:102)12-19 22:58:28.994: W/System.err(29263): at android.os.Looper.loop(Looper.java:136)12-19 22:58:28.994: W/System.err(29263): at android.app.ActivityThread.main(ActivityThread.java:5017)12-19 22:58:28.994: W/System.err(29263): at java.lang.reflect.Method.invokeNative(Native Method)12-19 22:58:28.994: W/System.err(29263): at java.lang.reflect.Method.invoke(Method.java:515)12-19 22:58:28.994: W/System.err(29263): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)12-19 22:58:28.994: W/System.err(29263): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)12-19 22:58:28.994: W/System.err(29263): at dalvik.system.NativeStart.main(Native Method)12-19 22:58:28.994: E/ObjectHelper(29263): Can''t find method:setCompatibilityInfo12-19 22:58:29.034: I/ActivityManager(447): Process com.google.android.gms (pid 29003) has died.12-19 22:58:29.044: D/dalvikvm(29263): GC_CONCURRENT freed 244K, 9% free 3311K/3616K, paused 2ms+1ms, total 18ms12-19 22:58:29.059: I/ActivityManager(447): START u0 {flg=0x10800000 cmp=com.estrongs.android.pop/.app.InstallMonitorActivity (has extras)} from pid 2926312-19 22:58:29.104: I/ActivityManager(447): Start proc com.metago.astro for broadcast com.metago.astro/com.kii.cloud.collector.Receiver: pid=29277 uid=10085 gids={50085, 3003, 1028, 1015}12-19 22:58:29.174: D/Print(28831): resume()
答案1
小编典典我发现这是-这个Toast是哪里来的?使相机预览再次刷新。
您是否将手机用作仿真器?仅当我将手机用作仿真器时,我才会收到此类消息。当您尝试在任何设备上运行应用程序时,此类消息都不会出现。只有当应用程序运行在您的ide上时,您才能得到该Toast
这是 ES File Explorer应用程序
生成的“内部内部存储空间”Toast,我想暂停Camera预览片刻,然后必须再次调用onResume()。禁用该Toast消息不再导致暂停和刷新预览。
感谢大家的帮助。:)
Android M权限:onRequestPermissionsResult()未被调用
如何解决Android M权限:onRequestPermissionsResult()未被调用?
我遇到了同样的问题,我才找到解决方案。使用支持库时,必须使用正确的方法调用。例如:
- 在AppCompatActivity中时,应使用ActivityCompat.requestPermissions ;
- 在android.support.v4.app.Fragment中时,你应该只使用requestPermissions(这是android.support.v4.app.Fragment的实例方法) 如果你在片段中调用ActivityCompat.requestPermissions,则会在活动而非片段上调用onRequestPermissionsResult回调。
希望这可以帮助!
解决方法
我正在更新我们的应用程序以使用新的M权限系统。除了onRequestPermissionsResult()以外,其他所有功能都可以使用。我需要检查按下按钮的权限,如果成功,则发送短信。当我授予执行权限时,对话框关闭,但是直到再次按下按钮时,它才触发“发送文本”。
我已经在onRequestPermissionsResult()
方法中调试并设置了断点,但是它从来没有涉及到它。
首先调用此方法:
private void askForPermission() {
String[] permissions = new String[]{Manifest.permission.SEND_SMS};
ActivityCompat.requestPermissions(getActivity(),permissions,PERMISSIONS_CODE);
}
然后我的回调如下所示:
@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
super.onRequestPermissionsResult(requestCode,grantResults);
if (requestCode == PERMISSIONS_CODE) {
for (int i = 0; i < permissions.length; i++) {
String permission = permissions[i];
int grantResult = grantResults[i];
if (permission.equals(Manifest.permission.SEND_SMS)) {
if (grantResult == PackageManager.PERMISSION_GRANTED) {
onPPSButtonPress();
} else {
requestPermissions(new String[]{Manifest.permission.SEND_SMS},PERMISSIONS_CODE);
}
}
}
}
}
有人遇到过类似的问题吗?感谢对此的任何帮助。谢谢
Android oncreateview调用了两次
我有一个用户执行此操作的应用:
1 – 打开navigationDrawer并选择一个选项(创建一个片段)(我在这里选择第二个选项);
public void selectItem(int position) { Fragment fragment = null; switch (position) { case FRAGMENT_OPTION1: ... break; case FRAGMENT_OPTION2: fragment = ControlPanelFragment.newInstance(); break; ... case FRAGMENT_OPTIONN: ... return; default: break; } if (fragment != null) { FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.fragment_container,fragment).commitAllowingStateLoss(); } }
2 – 加载所选选项(ControlPanelFragment):
2.1 – 控制面板有标签和iconpager.对于每个寻呼机页面和每个选项卡,都会创建一个新的片段.我有3个标签和3个页面,因此创建了9个片段;
@Override public void onViewCreated(View view,@Nullable Bundle savedInstanceState) { super.onViewCreated(view,savedInstanceState); if (savedInstanceState != null) { currentControlPanelOption = savedInstanceState.getInt("currentControlPanelOption",currentControlPanelOption); currentControlPanelTab = savedInstanceState.getInt("currentControlPanelTab",currentControlPanelTab); } setControlPanelTabs(); setIconPager(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("currentControlPanelOption",pager.getCurrentItem()); outState.putInt("currentControlPanelTab",mTabHost.getCurrentTab()); }
3 – 在setIconPager()中;我有这个代码:
pager = (ViewPager) view.findViewById(R.id.pager); cPanelPagerAdapter = new ControlPanelPagerAdapter(getChildFragmentManager()); pager.setoffscreenPageLimit(2); pager.setAdapter(cPanelPagerAdapter);
其中ControlPanelPagerAdapter具有以下代码:
public Fragment getItem(int index) { Fragment fragment; switch (index) { case 1: fragment = FragmentA.newInstance(); break; case 2: fragment = FragmentB.newInstance(); break; case 3: fragment = FragmentC.newInstance(); break; default: fragment = null; break; } ... return fragment; }
4 – FragmentA,FragmentB和FragmentC具有几乎相同的代码:
public static FragmentA newInstance() { return new FragmentA(); } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_placeholder,container,false); return view; } @Override public void onViewCreated(View view,Bundle savedInstanceState) { super.onViewCreated(view,savedInstanceState); if (savedInstanceState == null) { fragmentA_Data = new FragmentADetail[3]; createTabInstance(0); } else { fragmentA_Data = (FragmentADetail[]) savedInstanceState.getSerializable("Data"); return; } } private void createTabInstance(int tab) { new FragmentADetail(); fragment = FragmentADetail.newInstance(tab); Bundle args = new Bundle(); args.putInt("tab",tab); fragment.setArguments(args); fragmentA_Data[tab] = fragment; FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.fragment_placeholder,fragmentA_Data[tab]); fragmentTransaction.commitAllowingStateLoss(); } public void getTabData(int tab) { if (fragmentA_Data[tab] == null) { createStoreTimePeriodInstance(tab); } else { if (fragmentA_Data[tab].getArguments() == null) { Bundle args = new Bundle(); args.putInt("tab",tab); fragmentA_Data[tab].setArguments(args); } FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.fragment_placeholder,fragmentA_Data[tab]); fragmentTransaction.commitAllowingStateLoss(); } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putSerializable("data",fragmentA_Data); }
5 – 最后,FragmentADetail有这个代码:
public static FragmentADetail newInstance(int tab) { selectedTab = tab; return new FragmentADetail(); } @Override public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) { view = inflater.inflate(R.layout.details_fragment,false); ... if (savedInstanceState != null) { selectedTab = savedInstanceState.getInt("selectedTab"); } ... } public void getTabData(int tab) { //This is where I'm getting the data that populates the layout } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("selectedTab",selectedTab); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Bundle args = getArguments(); if (args != null) { getTabData(args.getInt("tab")); } }
现在,想象一下我在FragmentA上选择了第三个标签.如果我旋转屏幕,我会有以下事件序列:
> ControlPanelFragment onSaveInstanceState保存当前选项卡和当前片段
> FragmentA onSaveInstanceState保存寻呼机的选项卡片段
> navigationDrawer第二个选项再次被称为fragment = ControlPanelFragment.newInstance();
>调用onConCreated的ControlPanelFragment,我可以获取保存的数据信息,并创建新的寻呼机和标签
>调用FragmentA onViewCreated,我可以提取保存的数据
> FragmentADetail onActivityCreated获取保存的数据并正确加载数据(至少我认为)
从现在起第二次调用第二组方法,之前保存的数据被重置,因此它现在显示错误的数据
> ControlPanelFragment onSaveInstanceState但现在savedInstanceState为null
> ControlPanelPagerAdapter getItem被调用实例化3个片段
> FragmentA onSaveInstanceState现在调用它,但savedInstanceState为null
>调用FragmentADetail onActivityCreated但现在tab = 0
有人可以解释一下 – 我怎么能阻止步骤7到10发生?
解决方法
当我这样做时:
case FRAGMENT_OPTION2: fragment = ControlPanelFragment.newInstance(); break;
我正在创建一个片段,当我旋转屏幕时,再次调用selectItem(int position),因此创建了相同对象的新实例,因此执行了步骤7及其后续步骤.解决方案是检查片段是否已经创建并使用他而不是创建新片段.
我用标签保存了初始片段,然后他们查找了那个标签.如果标签存在,请使用该片段,否则创建一个新片段.
public void selectItem(int position) { Fragment fragment = null; switch (position) { case FRAGMENT_OPTION1: ... break; case FRAGMENT_OPTION2: fragment = getSupportFragmentManager().findFragmentByTag(String.valueOf(position)); if (fragment == null) { fragment = ControlPanelFragment.newInstance(); } break; ... case FRAGMENT_OPTIONN: ... return; default: break; } if (fragment != null) { FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.fragment_container,fragment,String.valueOf(position)).commitAllowingStateLoss(); } }
android – onSurfaceChanged调用了两次
我正在使用openGL ES创建一个Android应用程序,我有以下问题:
当我最小化应用程序,然后重新打开它时,在我的GLSurfaceView.Renderer中的onSurfaceChanged被调用2次.
我在onSurfaceChanged中有以下代码(和onSurfaceCreated,onDrawFrame中的类似代码):
Log.e("onSurfaceChanged",Integer.toString(width)+" "+Integer.toString(height));
所以我得到以下日志:
onSurfaceCreated onSurfaceChanged 480 800 onDrawFrame onSurfaceChanged 480 800 onDrawFrame onDrawFrame onDrawFrame onDrawFrame onDrawFrame onDrawFrame (...)
当我最小化时,将屏幕方向从纵向更改为横向,然后重新打开,onSurfaceChanged被调用3次.日志是:
onSurfaceCreated onSurfaceChanged 480 800 onDrawFrame onSurfaceChanged 480 800 onDrawFrame onDrawFrame onDrawFrame onSurfaceChanged 800 480 onDrawFrame onDrawFrame onDrawFrame onDrawFrame onDrawFrame onDrawFrame (...)
我的问题:这是一个错误吗?在我的应用程序中还是Android错误?有一种方法可以在onSurfaceChanged上调用一次吗? (因为在onSurfaceCreated中我正在执行减慢应用程序的代码)
提前致谢
就个人而言,我在我的类中继承了GLSurfaceView的onSurfaceChanged并没有做太多.
我只根据新的分辨率设置视口,并将当前的分辨率尺寸保存到变量中.
不需要在onSurfaceChanged上重新创建纹理等OpenGL资源,而是选择ActivityCycle上的正确位置来创建和销毁OpenGL资产.
我在几个平台上运行我的游戏,如Android,亚马逊Fire TV和OUYA.我发现在所有这些平台上运行的是在onPause,onStop和onRestart上销毁GL资产,但我还保留一个标志,看看资产是否已被销毁,所以我不会在原始版本中销毁它两次.
我在onCreate,onRestart和onResume上创建了OpenGL资源(也使用了一个不创建它的标志两次).
如果您不希望游戏在暂停时丢失状态,则必须序列化游戏状态并将其写入文件并在以后恢复时加载.
希望这可以帮助.
同样,你无法真实地预测你会收到多少onSurfaceCreated,特别是它可能在不同的设备上表现不同.
但是,您始终可以信任ActivityCycle的行为与Google所描述的相同.
android – 为什么onLayout和onSizeChanged在方向更改时被调用两次?
有谁知道为什么,和/或如何解决这个问题?看起来,在配置更改之后,屏幕尺寸的变化可能会发生很多时候 – 即在调用onConfigurationChanged时配置更改后,尺寸是否不正确?
以下是以下代码的调试输出,在从纵向到横向旋转之后显示onLayout / onSizeChanged调用(请注意,设备为540×960,因此横向宽度应为960,而纵向宽度为540):
03-13 17:36:21.140: DEBUG/RotateTest(27765): onConfigurationChanged: LANDSCAPE 03-13 17:36:21.169: DEBUG/RotateTest(27765): onSizeChanged:540,884,0 03-13 17:36:21.189: DEBUG/RotateTest(27765): onLayout:true-0,540,884 03-13 17:36:21.239: DEBUG/RotateTest(27765): onSizeChanged:960,464,884 03-13 17:36:21.259: DEBUG/RotateTest(27765): onLayout:true-0,960,464
还要注意的是,第一个onSizeChanged oldwidth和oldheight为0,表示我们刚刚添加到视图层次结构 – 但是具有错误的横向尺寸!
这里是说明这个行为的代码:
MyActivity.java
package com.example; import android.app.Activity; import android.content.res.Configuration; import android.os.Bundle; import android.util.Log; import android.widget.FrameLayout; public class MyActivity extends Activity { private static String TAG = "RotateTest"; @Override public void onConfigurationChanged(Configuration newConfig) { Log.d(TAG,"onConfigurationChanged: " + (newConfig.orientation == 1 ? "PORTRAIT" : "LANDSCAPE")); super.onConfigurationChanged(newConfig); _setView(); } @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG,"onCreate"); super.onCreate(savedInstanceState); _setView(); } private void _setView() { Myhorizontalscrollview scrollView = new Myhorizontalscrollview(this,null); setContentView(scrollView); } }
MyHorizontalScrollView.java
package com.example; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.widget.horizontalscrollview; public class Myhorizontalscrollview extends horizontalscrollview { private static String TAG = "RotateTest"; public Myhorizontalscrollview(Context context,AttributeSet attrs) { super(context,attrs); } @Override protected void onLayout(boolean changed,int l,int t,int r,int b) { super.onLayout(changed,l,t,r,b); Log.d(TAG,"onLayout:" + String.format("%s-%d,%d,%d",changed,b)); } @Override protected void onSizeChanged(int w,int h,int oldw,int oldh) { super.onSizeChanged(w,h,oldw,oldh); Log.d(TAG,"onSizeChanged:" + String.format("%d,w,oldh)); } }
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="9"/> <application android:label="@string/app_name" > <activity android:name="MyActivity" android:label="@string/app_name" android:configChanges="orientation" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
解决方法
我回答这个问题的方式 – 因为我相信答案是,这取决于 – 通过在requestLayout方法中添加一个try / catch或logging语句.这样,您可以查看何时进行重新测量和重新布置的请求,以及在尝试/捕获的情况下由谁执行.
Android中的布局方式是将您的视图标记为具有requestLayout的脏布局.总是在一段时间内在UI线程上运行的Android玩家将会在未来的某个不确定点重新设计和重新布置树中已经被标记为脏的视图.
我冒昧地猜测,onConfigurationChanged,你正在得到几个requestLayout调用,而looper正在调用onMeasure在其中的某个地方.
这就是我的日志记录:
11-07 15:39:13.624: W/YARIAN(30006): requestLayout 11-07 15:39:13.632: W/YARIAN(30006): requestLayout 11-07 15:39:13.640: W/YARIAN(30006): requestLayout 11-07 15:39:13.647: W/YARIAN(30006): requestLayout 11-07 15:39:13.686: W/YARIAN(30006): requestLayout 11-07 15:39:13.718: W/YARIAN(30006): requestLayout 11-07 15:39:13.827: W/YARIAN(30006): requestLayout 11-07 15:39:14.108: W/YARIAN(30006): onLayout 11-07 15:39:14.155: W/YARIAN(30006): requestLayout 11-07 15:39:14.272: W/YARIAN(30006): onLayout
The Android documentation has more information在测量和铺设时,可悲的是我上面描述的细节很短.
Event Handling and Threading
The basic cycle of a view is as follows:
- An event comes in and is dispatched to the appropriate view. The view handles the event and notifies any listeners.
- If in the course of processing the event,the view’s bounds may need to be changed,the view will call requestLayout().
- Similarly,if in the course of processing the event the view’s appearance may need to be changed,the view will call invalidate().
- If either requestLayout() or invalidate() were called,the framework will take care of measuring,laying out,and drawing the
tree as appropriate.Note: The entire view tree is single threaded. You must always be on the UI thread when calling any method on any view. If you are doing work on other threads and want to update the state of a view from that thread,you should use a Handler.
今天关于为什么onResume和似乎被调用了两次?的分享就到这里,希望大家有所收获,若想了解更多关于Android M权限:onRequestPermissionsResult()未被调用、Android oncreateview调用了两次、android – onSurfaceChanged调用了两次、android – 为什么onLayout和onSizeChanged在方向更改时被调用两次?等相关知识,可以在本站进行查询。
本文标签: