Android 零点处理

Android 零点处理,android,Android,我是android应用程序开发新手。在开发我的第一个应用程序时,我在button1.setonClickListener发现了空点异常。我可以初始化什么值为变量类型Button以避免空点异常。 包com.example.first public class MainActivity extends ActionBarActivity { private Button > btn1; > > private ImageView imagetoshow; >

我是android应用程序开发新手。在开发我的第一个应用程序时,我在button1.setonClickListener发现了空点异常。我可以初始化什么值为变量类型Button以避免空点异常。 包com.example.first

 public class MainActivity extends ActionBarActivity { 
 private Button
> btn1;
> 
> private ImageView imagetoshow;
>     @Override
>     protected void onCreate(Bundle savedInstanceState) {
>         super.onCreate(savedInstanceState);
>         setContentView(R.layout.activity_main);
>         
>         btn1=(Button)findViewById(R.id.button1);
>          
>           imagetoshow=(ImageView)findViewById(R.id.imageView1);
>        
>         if(btn1!=null){       btn1.setOnClickListener(new View.OnClickListener() {
>               @Override
>               public void onClick(View v) {
>               
>             imagetoshow.setImageResource(R.drawable.image1);
>                   
>               }
>             }); }
>      
>         if (savedInstanceState == null) {
>             getSupportFragmentManager().beginTransaction()
>                     .add(R.id.container, new PlaceholderFragment())
>                     .commit();
>         }
>     }
> 
> 
>       @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;
>     }
> 
>     @Override
>     public boolean onOptionsItemSelected(MenuItem item) {
>         // Handle action bar item clicks here. The action bar will
>         // automatically handle clicks on the Home/Up button, so long
>         // as you specify a parent activity in AndroidManifest.xml.
>         int id = item.getItemId();
>         if (id == R.id.action_settings) {
>             return true;
>         }
>         return super.onOptionsItemSelected(item);
>     }
> 
>     /**
>      * A placeholder fragment containing a simple view.
>      */
>     public static class PlaceholderFragment extends Fragment {
> 
>         public PlaceholderFragment() {
>         }
> 
>         @Override
>         public View onCreateView(LayoutInflater inflater, ViewGroup container,
>                 Bundle savedInstanceState) {
>             View rootView = inflater.inflate(R.layout.fragment_main, container, false);
>             return rootView;
>         }
>     }
> 
>    }

在尝试调用该对象上的方法之前,应该检查button1是否为null,如:

if(button1 != null) {
    button1.setonClickListener()
}

但我想知道为什么按钮是空的?您的代码一定有问题…

好吧,您需要通过以下方式从xml获取代码来初始化它:

button1 = (Button) findViewById(R.id.myButton);
或者通过创建一个新对象手动初始化它,但随后还需要将其作为子对象添加到视图组中

我强烈推荐第一个选项用于大多数不动态生成内容的用例

-编辑-

从代码判断,我只能断定id为“button1”的按钮不在activity_main.xml文件中。只能使用已设置为内容视图的布局文件中定义的视图。您应该在将内容视图更改为正确布局文件的activity_main.xml中定义按钮

-编辑-

似乎您想在片段中使用按钮。然后,您应该在代码中称为占位符片段的片段内初始化按钮:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_main,
                container, false);
                button1 = (Button) v.findViewById(R.id.button1);
        return v;
}

据我猜测。因为您没有post xml文件

我可以给你一个建议

       public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) 
      {
                View v = inflater.inflate(R.layout.fragment_main,
                        container, false);
                            button1 = (Button) v.findViewById(R.id.button1);


button1.setOnClickListner(new View.OnClickListener() 
    {
                   @Override
                   public void onClick(View v)
                  {

                    imagetoshow.setImageResource(R.drawable.image1);

                   }
                 });
    }

            return v;
    }
第二项建议
如果您不想使用片段概念,请使用活动扩展。并删除xml文件中的所有额外代码和更改,在activity_main.xml上添加按钮

发布您的LogCat错误和代码请发布您的代码和LogCat例外我认为您没有在活动的xml上找到按钮1。请查看该链接了解更多信息。大多数情况下,您可以非常确定该按钮不是空的。如果为空,则它将始终为空。因此,如果您需要检查,它将始终失败,并且按钮将永远无法单击。大多数时间并不意味着总是,这就是我们进行检查的原因,或者我们确定代码中发生了什么。@vamshi请查看我的答案,您需要初始化它。@xwid我的意思是所有时间。如果您初始化一个对象,它将不会为null,除非您做了错误的事情。您应该修复错误,而不是捕获错误。有些用例中,一个对象有时只是空的,但不是这个。但我的相对布局在fragment_main.xml中,框架布局在activity_main.xml中,我在fragment_main.xml中定义了按钮这是你的问题。这是不可能的。如果使用findViewById查找视图,则需要将该按钮添加到setContentView中定义的视图中。但听起来你想使用片段中的按钮。然后,您应该在Fragment类中设置OnCLickListener。我在哪里可以找到Fragment类?我在哪里可以找到Fragment类?可能在src中的包中。根据您发布的代码判断,它被称为占位符碎片。请告诉我,默认情况下,如何在activity_main.xml中设置相对布局?因为我不知道片段的概念。请帮助我,因为我一直在试图在布局中创建新的.xml。您将获得布局选项选择相对布局。无论何时创建新项目,您都会在新的adt eclipse中找到片段概念。。但在您的项目中不需要它,只需将其删除即可。。所有不需要的方法、随活动扩展、删除框架并在Activity_main.xml中进行更改。
       public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) 
      {
                View v = inflater.inflate(R.layout.fragment_main,
                        container, false);
                            button1 = (Button) v.findViewById(R.id.button1);


button1.setOnClickListner(new View.OnClickListener() 
    {
                   @Override
                   public void onClick(View v)
                  {

                    imagetoshow.setImageResource(R.drawable.image1);

                   }
                 });
    }

            return v;
    }