-2

これは、Javaクラスで使用されるコードです。Eclipseでエラーは表示されません。logcatは、nullポインター例外とクラスカースト例外を表示します。

package com.myfirstapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;


public class MyfirstappActivity extends Activity {
/** Called when the activity is first created. */

int count ;
Button add,sub;
TextView txt;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    count = 0;
    add = (Button) findViewById(R.id.add_one);
    sub = (Button) findViewById(R.id.sub_one);
    txt = (Button) findViewById(R.id.display);
    setContentView(R.layout.main);
    add.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View v) {
            // TODO Auto-generated method stub
            count = count + 1;
            txt.setText("Your total is " + count);
        }
    });

    sub.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // TODO Auto-generated method stub
            count = count - 1;
            txt.setText("Your total is " + count);
        }
    }); 

}

これは、作成されたmain.xmlレイアウトファイルです。その間にプロジェクトをクリーンアップしてみました。trycatchメカニズムを使用してみました。上記のコードの一部を参照しているボタンにコメントすると、アプリは正常に実行されます。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:weightSum="1">

    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="60dp" 
        android:text="@string/hello"
        android:id="@+id/display"
        android:textSize="40dp"
        android:gravity="center" />

   <Button
       android:text="@string/add1"
       android:layout_gravity="center" 
       android:layout_width="fill_parent"
       android:layout_height="60dp"
       android:id="@+id/add_one"
       android:textSize="40dp"
       android:gravity="center">
   </Button>

   <Button
       android:text="@string/sub1"
       android:layout_gravity="center" 
       android:layout_width="fill_parent"
       android:layout_height="60dp"
       android:id="@+id/sub_one"
       android:textSize="40dp"
       android:gravity="center">
   </Button>

</LinearLayout>
4

6 に答える 6

2

変化する

 txt = (Button) findViewById(R.id.display);

 txt = (TextView) findViewById(R.id.display);

TextViewをButtonにキャストし、それをTextViewインスタンスに割り当てようとしているためです。setContentView(R.layout.main);また、UI要素を初期化する前に次のように移動 します。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);   //<<< set layout for Activity here
    // access UI elements here
于 2013-01-19T06:04:25.230 に答える
0

このように書いてください...

public void onCreate(Bundle savedInstanceState) 
{
   super.onCreate(savedInstanceState);

   setContentView(R.layout.main);
   count = 0;
   add = (Button) findViewById(R.id.add_one);
   sub = (Button) findViewById(R.id.sub_one);
   txt = (Button) findViewById(R.id.display);
}

を変更します

txt = (Button) findViewById(R.id.display);

txt = (Textview) findViewById(R.id.display);
于 2013-01-19T06:04:38.647 に答える
0

txtTextView、ボタンにキャストしています。使用する

txt = (TextView) findViewById(R.id.display);

また、このためのレイアウトリソースを設定する必要があります。だから、使用してください

super.onCreate();
setContentView(R.layout.main);

編集-あなたのコードは次のようなものでなければなりません、

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
count = 0;
add = (Button) findViewById(R.id.add_one);
sub = (Button) findViewById(R.id.sub_one);
txt = (TextView) findViewById(R.id.display);
于 2013-01-19T06:05:21.923 に答える
0

setcontentviewは、super.oncreateの後に次のように記述する必要があります。

super.onCreate(savedInstanceState);
setContentView(R.layout.main);
于 2013-01-19T06:05:53.590 に答える
0

ビューオブジェクトを初期化した後にレイアウトを設定するので、nullポインタをこれに変更します

super.onCreate();
setContentView(R.layout.main);
// then init the object, Here need to set layout first then find view by id
add = (Button) findViewById(R.id.add_one); 
sub = (Button) findViewById(R.id.sub_one);
txt = (TextView) findViewById(R.id.display); // here you cast to button change to TextView
于 2013-01-19T06:06:04.163 に答える
0

textviewをbuttonにキャストし、setcontentviewの前にボタンのIDとtext viewも呼び出すため、エラーが発生します。これを試して :-

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
count = 0;
add = (Button) findViewById(R.id.add_one);
sub = (Button) findViewById(R.id.sub_one);
txt = (TextView) findViewById(R.id.display);
add.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub
        count = count + 1;
        txt.setText("Your total is " + count);
    }
    });

sub.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        // TODO Auto-generated method stub
        count = count - 1;
        txt.setText("Your total is " + count);
    }
}); 

}
}
于 2013-01-19T08:03:59.227 に答える