问题描述
我试图显示从另一个班级到我当前班级的图像。 我一直在阅读有关如何执行此操作的问题。
从错误日志中,我发现加载类未“获取” Im试图传递的上下文,并导致了Null指针。.我尝试了许多不同的变体和方法,太多了,无法在此处发布。因此,下面发布的代码是解释我的方法的最简洁,最有希望的方法。
图像“持有人”类MyImage.java
public class MyImage {
ImageView image3, image1;
View image2;
int right = R.id.image_holder;
int wrong = R.drawable.ic_wrong;
int layoutholder = R.id.layout_holder;
Bitmap a;
public View getView(Context context) {
image1.setBackgroundResource(wrong);
return getView(context);
}
我试图显示View的TestLoadingImage.java类
public class TestLoadingImage extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void myImageHandler (View view){
MyImage image = new MyImage();
View gView1 = image.getView(this);
LinearLayout layout = (LinearLayout) findViewById(R.id.layout_holder);
layout.addView(gView1);
}
}
这是我的main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/myimgbtn"
android:layout_height="wrap_content"
android:onClick="myImageHandler"
android:layout_width="fill_parent"
android:text="Image Handler Button"/>
<LinearLayout
android:id="@+id/layout_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView android:id="@+id/image_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:src="@drawable/right"/>
</LinearLayout>
</LinearLayout>
生成了,但是当我按下按钮显示视图时,它崩溃崩溃了。
`03-14 07:19:58.770: E/AndroidRuntime(4299): at android.graph.MyImage.getView(MyImage.java:26)
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.graph.TestLoadingImage.myImageHandler(TestLoadingImage.java:32)`
整个错误日志:
03-14 07:19:58.770: E/AndroidRuntime(4299): FATAL EXCEPTION: main
03-14 07:19:58.770: E/AndroidRuntime(4299): java.lang.IllegalStateException: Could not execute method of the activity
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.view.View$1.onClick(View.java:3591)
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.view.View.performClick(View.java:4084)
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.view.View$PerformClick.run(View.java:16966)
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.os.Handler.handleCallback(Handler.java:615)
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.os.Handler.dispatchMessage(Handler.java:92)
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.os.Looper.loop(Looper.java:137)
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.app.ActivityThread.main(ActivityThread.java:4745)
03-14 07:19:58.770: E/AndroidRuntime(4299): at java.lang.reflect.Method.invokeNative(Native Method)
03-14 07:19:58.770: E/AndroidRuntime(4299): at java.lang.reflect.Method.invoke(Method.java:511)
03-14 07:19:58.770: E/AndroidRuntime(4299): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
03-14 07:19:58.770: E/AndroidRuntime(4299): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-14 07:19:58.770: E/AndroidRuntime(4299): at dalvik.system.NativeStart.main(Native Method)
03-14 07:19:58.770: E/AndroidRuntime(4299): Caused by: java.lang.reflect.InvocationTargetException
03-14 07:19:58.770: E/AndroidRuntime(4299): at java.lang.reflect.Method.invokeNative(Native Method)
03-14 07:19:58.770: E/AndroidRuntime(4299): at java.lang.reflect.Method.invoke(Method.java:511)
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.view.View$1.onClick(View.java:3586)
03-14 07:19:58.770: E/AndroidRuntime(4299): ... 11 more
03-14 07:19:58.770: E/AndroidRuntime(4299): Caused by: java.lang.NullPointerException
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.graph.MyImage.getView(MyImage.java:26)
03-14 07:19:58.770: E/AndroidRuntime(4299): at android.graph.TestLoadingImage.myImageHandler(TestLoadingImage.java:32)
03-14 07:19:58.770: E/AndroidRuntime(4299): ... 14 more
1楼
日志在MyImage.java的第26行显示NullPointerException
。
尽管您没有指定哪一行,但是问题几乎可以肯定是image1.setBackgroundResource(wrong);
。
在MyImage
类中,您永远不会实例化任何视图。
因此, image1
, image2
和image3
均为空。
当您尝试设置image1
的背景资源时,您将因此生成NullPointerException
。
我不确定您希望/希望这些视图来自何处,但是它没有发生。
尽管现在这不是问题,因为您在getView()
返回之前就崩溃了,但是由于要return getView(context);
,您也会遇到无限递归的问题return getView(context);
。
2楼
尝试将应用程序上下文传递给MyImage:
MyImage image = new MyImage( getApplicationContext() );
3楼
Button bt1 =m_activity.findViewById(R.id.button1);
在上面的示例中,视图bt1来自另一个类。您可以使用类实例访问bt1并获取ID。现在,对bt1实例执行任何操作。
注意:确保bt1在另一个类中是公共的