Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更改ImageView的资源时强制关闭_Android_Imageview_Handler_Runnable_Ui Thread - Fatal编程技术网

Android 更改ImageView的资源时强制关闭

Android 更改ImageView的资源时强制关闭,android,imageview,handler,runnable,ui-thread,Android,Imageview,Handler,Runnable,Ui Thread,我在单击项目时更改imageview的资源时遇到一些问题。 我知道任何图形更新都应该在UI线程中完成,我尝试了两种方法都没有成功: …我的代码没有处理程序: public class AvatarPicker extends Activity { ImageView iv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCo

我在单击项目时更改imageview的资源时遇到一些问题。 我知道任何图形更新都应该在UI线程中完成,我尝试了两种方法都没有成功:

…我的代码没有处理程序:

public class AvatarPicker extends Activity {

ImageView iv; 

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

public void clicked(View v){
    iv = (ImageView) findViewById(v.getId());
    iv.setImageResource(R.drawable.avatar_0);
}}
…我的代码带有处理程序且可运行:

public class AvatarPicker extends Activity {

ImageView iv;
private Handler mHandler;

private Runnable updateImg = new Runnable() {
    @Override
    public void run() {
       iv.setImageResource(R.drawable.avatar_0);
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mHandler = new Handler(){};

}

public void clicked(View v){
    iv = (ImageView) findViewById(v.getId());
    mHandler.post(updateImg);
}
}

我已经将布局XML中的
onClick
设置为“clicked”,并为所有可点击的图像指定了一个唯一的id。当我将Log.d()几乎放在代码的每个地方时,我注意到它在
iv.setImageResource(R.drawable.avatar_0)处停止命令

有人能帮我吗?我错过了什么?谢谢

以下是一些额外的LOGCAT信息:

06-17 19:23:09.877: INFO/ActivityManager(1184): Process com.google.android.apps.maps:FriendService (pid 4580) has died.
06-17 19:23:09.907: INFO/ActivityManager(1184): Displayed activity weldeborn.avatar/.AvatarPicker: 1008 ms (total 1008 ms)
06-17 19:23:10.077: DEBUG/ddm-heap(4602): Got feature list request
06-17 19:23:10.157: DEBUG/dalvikvm(1701): GC freed 2115 objects / 112440 bytes in 99ms
06-17 19:23:12.607: DEBUG/AndroidRuntime(4602): Shutting down VM
06-17 19:23:12.607: WARN/dalvikvm(4602): threadid=3: thread exiting with uncaught exception (group=0x40026160)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602): Uncaught handler: thread main exiting due to uncaught exception
06-17 19:23:12.617: ERROR/AndroidRuntime(4602): java.lang.NullPointerException
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at weldeborn.avatar.AvatarPicker$1.run(AvatarPicker.java:21)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at android.os.Handler.handleCallback(Handler.java:587)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at android.os.Looper.loop(Looper.java:123)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at android.app.ActivityThread.main(ActivityThread.java:4370)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at java.lang.reflect.Method.invokeNative(Native Method)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at java.lang.reflect.Method.invoke(Method.java:521)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602):     at dalvik.system.NativeStart.main(Native Method)
06-17 19:23:12.627: ERROR/SemcCheckin(4602): Get crash dump level : java.io.FileNotFoundException: /data/semc-checkin/crashdump
06-17 19:23:12.627: WARN/ActivityManager(1184): Unable to start service Intent { act=com.sonyericsson.android.jcrashcatcher.action.BUGREPORT_AUTO cmp=com.sonyericsson.android.jcrashcatcher/.JCrashCatcherService (has extras) }: not found
06-17 19:23:12.627: INFO/Process(1184): Sending signal. PID: 4602 SIG: 3
06-17 19:23:12.627: INFO/dalvikvm(4602): threadid=7: reacting to signal 3
06-17 19:23:12.627: ERROR/dalvikvm(4602): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
06-17 19:23:12.667: ERROR/SemcCheckin(1687): Get Crash Level : java.io.FileNotFoundException: /data/semc-checkin/crashdump
06-17 19:23:15.557: DEBUG/WifiService(1184): ACTION_BATTERY_CHANGED pluggedType: 2
06-17 19:23:17.547: DEBUG/WifiService(1184): ACTION_BATTERY_CHANGED pluggedType: 2
06-17 19:23:22.707: DEBUG/dalvikvm(1852): GC freed 5128 objects / 468256 bytes in 150ms
橙色/红色的第一行是以下三行:

06-17 19:23:12.607: WARN/dalvikvm(4602): threadid=3: thread exiting with uncaught exception (group=0x40026160)
06-17 19:23:12.617: ERROR/AndroidRuntime(4602): Uncaught handler: thread main exiting due to uncaught exception
06-17 19:23:12.617: ERROR/AndroidRuntime(4602): java.lang.NullPointerException

代码通常是可以的,您不需要处理程序,因为您更改了主活动中的资源

我认为问题在于您从v.getId()获得imageView


onclick是否在imageView上?您可以直接((ImageView)v).setImageResource(…)或在onCreate方法中获取图像

通常代码是可以的,您不需要处理程序,因为您从主活动更改了资源

我认为问题在于您从v.getId()获得imageView


onclick是否在imageView上?您可以直接((ImageView)v).设置ImageResource(…)或使用onCreate方法获取图像

请发布您的例外情况的日志单击的是什么?您的图像视图还是其他视图?如上所述,请张贴您的日志猫。有没有更好的方式粘贴日志猫信息。。。这有点难读。谢谢你们的帮助请发布你的例外日志点击的是什么?您的图像视图还是其他视图?如上所述,请张贴您的日志猫。有没有更好的方式粘贴日志猫信息。。。这有点难读。谢谢你们的帮助是的,onClick在实际图像上,抱歉忘了说嗨!我尝试了你的“((ImageView)v).setImageResource(…)”方法,它成功了。非常感谢。但我真的很想知道为什么一开始它不起作用。你会得到你的答案的。:)为什么这不起作用?------------------------------------>ImageView iv=(ImageView)findViewById(v.getId());但这确实有效----------------->ImageView iv=(ImageView)v;是的,这一次是在真实的图像上,对不起,我忘了说嗨!我尝试了你的“((ImageView)v).setImageResource(…)”方法,它成功了。非常感谢。但我真的很想知道为什么一开始它不起作用。你会得到你的答案的。:)为什么这不起作用?------------------------------------>ImageView iv=(ImageView)findViewById(v.getId());但这确实有效----------------->ImageView iv=(ImageView)v;