- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我试图为 Android 制作一个非常简单的 MVC 应用程序。 Observer 正确实现并且 Observable 扩展正确,所以一切都很顺利。但是,每当我运行该应用程序时,我都会收到 NullPointerException。谁能弄清楚为什么吗?这一定是我缺少的一些简单的东西。
activity_main.xml
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/nameView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/hello_world"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/nameSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/change"
android:layout_marginTop="20dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/storeView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/hello_world"
android:layout_marginTop="80dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/storeSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/change"
android:layout_marginTop="100dp"
android:textAppearance="?android:attr/textAppearanceMedium" />
</RelativeLayout>
</ScrollView>
MainActivity.java
public class MainActivity extends Activity implements Observer{
private ClipboardModel model;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.model = new ClipboardModel();
System.out.println(this.model.getName());
this.model.addObserver(this);
//redraw();
setContentView(R.layout.activity_main);
}
@Override
public void update(Observable arg0, Object arg1) {
redraw();
}
private void redraw(){
TextView nameView = (TextView)findViewById(R.id.nameView);
nameView.setText(this.model.getName());
TextView storeView = (TextView)findViewById(R.id.storeView);
storeView.setText(this.model.getStore());
}
/*
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}*/
}
ClipboardModel.java
public class ClipboardModel extends Observable{
private String name;
private String store;
private int[] a;
private int[] b;
private int[] c;
private int[] d;
private int[] e;
private int[] g;
private int[] h;
private int[] f;
private int[] w;
private int[] s;
private int[] l;
private int[] p;
private int[] v;
private int[] x;
private int ldw;
private int pai;
private int pep;
private int ali;
private int cpp;
private int gps;
private int rsn;
private int fuel;
private int xm;
private int cs;
/**
* Constructor for ClipboardModel
*/
public ClipboardModel(){
this.a = new int[3];
this.b = new int[3];
this.c = new int[3];
this.d = new int[3];
this.e = new int[3];
this.g = new int[3];
this.h = new int[3];
this.f = new int[3];
this.w = new int[3];
this.s = new int[3];
this.l = new int[3];
this.p = new int[3];
this.v = new int[3];
this.x = new int[3];
this.ldw = 0;
this.pai = 0;
this.pep = 0;
this.ali = 0;
this.cpp = 0;
this.gps = 0;
this.rsn = 0;
this.fuel = 0;
this.xm = 0;
this.cs = 0;
this.name = "Name";
this.store = "Store";
}
/**
* Add a car to the appropriate array
* @param type - Category of car
* @param clean - whether or not the car is clean
*/
public void addCar(String type, boolean clean){
if(type.equals("a")){
this.a[0]++;
if(clean)
this.a[1]++;
else
this.a[2]++;
}
else if(type.equals("b")){
this.b[0]++;
if(clean)
this.b[1]++;
else
this.b[2]++;
}
else if(type.equals("c")){
this.c[0]++;
if(clean)
this.c[1]++;
else
this.c[2]++;
}
else if(type.equals("d")){
this.d[0]++;
if(clean)
this.d[1]++;
else
this.d[2]++;
}
else if(type.equals("e")){
this.e[0]++;
if(clean)
this.e[1]++;
else
this.e[2]++;
}
else if(type.equals("g")){
this.g[0]++;
if(clean)
this.g[1]++;
else
this.g[2]++;
}
else if(type.equals("b")){
this.h[0]++;
if(clean)
this.h[1]++;
else
this.h[2]++;
}
else if(type.equals("f")){
this.f[0]++;
if(clean)
this.f[1]++;
else
this.f[2]++;
}
else if(type.equals("w")){
this.w[0]++;
if(clean)
this.w[1]++;
else
this.w[2]++;
}
else if(type.equals("s")){
this.s[0]++;
if(clean)
this.s[1]++;
else
this.s[2]++;
}
else if(type.equals("l")){
this.l[0]++;
if(clean)
this.l[1]++;
else
this.l[2]++;
}
else if(type.equals("p")){
this.p[0]++;
if(clean)
this.p[1]++;
else
this.p[2]++;
}
else if(type.equals("v")){
this.v[0]++;
if(clean)
this.v[1]++;
else
this.v[2]++;
}
else if(type.equals("x")){
this.x[0]++;
if(clean)
this.x[1]++;
else
this.x[2]++;
}
setChanged();
notifyObservers();
}
/**
* Remove a car from the appropriate array
* @param type - Category of car
* @param clean - Whether or not the car is clean
*/
public void removeCar(String type, boolean clean){
if(type.equals("a")){
this.a[0]--;
if(clean)
this.a[1]--;
else
this.a[2]--;
}
else if(type.equals("b")){
this.b[0]--;
if(clean)
this.b[1]--;
else
this.b[2]--;
}
else if(type.equals("c")){
this.c[0]++;
if(clean)
this.c[1]--;
else
this.c[2]--;
}
else if(type.equals("d")){
this.d[0]--;
if(clean)
this.d[1]--;
else
this.d[2]--;
}
else if(type.equals("e")){
this.e[0]--;
if(clean)
this.e[1]--;
else
this.e[2]--;
}
else if(type.equals("g")){
this.g[0]--;
if(clean)
this.g[1]--;
else
this.g[2]--;
}
else if(type.equals("b")){
this.h[0]--;
if(clean)
this.h[1]--;
else
this.h[2]--;
}
else if(type.equals("f")){
this.f[0]--;
if(clean)
this.f[1]--;
else
this.f[2]--;
}
else if(type.equals("w")){
this.w[0]--;
if(clean)
this.w[1]--;
else
this.w[2]--;
}
else if(type.equals("s")){
this.s[0]--;
if(clean)
this.s[1]--;
else
this.s[2]--;
}
else if(type.equals("l")){
this.l[0]--;
if(clean)
this.l[1]--;
else
this.l[2]--;
}
else if(type.equals("p")){
this.p[0]--;
if(clean)
this.p[1]--;
else
this.p[2]--;
}
else if(type.equals("v")){
this.v[0]++;
if(clean)
this.v[1]--;
else
this.v[2]--;
}
else if(type.equals("x")){
this.x[0]--;
if(clean)
this.x[1]--;
else
this.x[2]--;
}
setChanged();
notifyObservers();
}
/**
* Add a CSI
* @param type - type of CSI to add
*/
public void addCSI(String type){
if(type.equals("ldw"))
this.ldw++;
else if(type.equals("pai"))
this.pai++;
else if(type.equals("pep"))
this.pep++;
else if(type.equals("ali"))
this.ali++;
else if(type.equals("cpp"))
this.cpp++;
else if(type.equals("gps"))
this.gps++;
else if(type.equals("rsn"))
this.rsn++;
else if(type.equals("fuel"))
this.fuel++;
else if(type.equals("xm"))
this.xm++;
else if(type.equals("cs"))
this.cs++;
setChanged();
notifyObservers();
}
/**
* Remove a CSI
* @param type - type of CSI to remove
*/
public void removeCSI(String type){
if(type.equals("ldw"))
this.ldw--;
else if(type.equals("pai"))
this.pai--;
else if(type.equals("pep"))
this.pep--;
else if(type.equals("ali"))
this.ali--;
else if(type.equals("cpp"))
this.cpp--;
else if(type.equals("gps"))
this.gps--;
else if(type.equals("rsn"))
this.rsn--;
else if(type.equals("fuel"))
this.fuel--;
else if(type.equals("xm"))
this.xm--;
else if(type.equals("cs"))
this.cs--;
setChanged();
notifyObservers();
}
/**
* Setter for name
* @param name - Employee name
*/
public void setName(String name){
this.name = name;
setChanged();
notifyObservers();
}
/**
* Setter for store
* @param store - Store name
*/
public void setStore(String store){
this.store = store;
setChanged();
notifyObservers();
}
/**
* Getter for name
* @return this.name
*/
public String getName(){
return this.name;
}
/**
* Getter for store
* @return
*/
public String getStore(){
return this.store;
}
}
该错误发生在 MainActivity.java 的 Method redraw() 中的第 29 行。第 28-29 行状态:
TextView nameView = (TextView)findViewById(R.id.nameView);
nameView.setText(this.model.getName());
任何解决错误的帮助将不胜感激!谢谢!
最佳答案
您的 nameview
为 null
因为您在设置 setContentView() 之前尝试引用 Textview
试试这个
放置此
this.model = new ClipboardModel();
System.out.println(this.model.getName());
this.model.addObserver(this);
在setContentView(R.layout.activity_main);
之后
关于java - Android奇怪的ComponentInfo NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16433050/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!