1

やあみんな、私が理解しようとしてきた面白い小さなバグがあります。私は学生であることを覚えておいてください。なぜそれが起こっているのか知りたいのですが、クラスとエラーが発生している場所を表示してください。よろしくお願いします。

                package com.example.assignment;


          import android.app.Activity;
          import android.content.Intent;
          import android.database.Cursor;
          import android.database.SQLException;
          import android.database.sqlite.SQLiteDatabase;
          import android.os.Bundle;
          import android.util.Log;
          import android.view.Menu;
          import android.view.MenuInflater;
          import android.view.MenuItem;
          import android.view.View;
          import android.view.View.OnClickListener;
          import android.widget.Button;
          import android.widget.EditText;
          import android.widget.TextView;


    public class ViewRate extends Activity implements  OnClickListener {

private int rowID;
private TextView codetv;
private TextView signtv;
private TextView ratetv;
private final String dbName="CurrencyDB";
private final String tableName="Rates";
SQLiteDatabase sampleDB=null;   
//
EditText torate, fromrate;
Button convertto,convertfrom;
TextView conRate;


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewrate);
    setViews();     
    Bundle extra=getIntent().getExtras();
    rowID=extra.getInt(MainActivity.ROW_ID); 
    fillViews();        
    convertto = (Button)findViewById(R.id.convertto);       
    convertfrom =(Button)findViewById(R.id.convertfrom);
    convertfrom.setOnClickListener(from);
    convertto.setOnClickListener(to);}

private OnClickListener to = new OnClickListener() { <-------ERROR

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        //converttocur();
                       conRate.setText("pressed"); <------testing still wont work
    }
};
   private OnClickListener from = new OnClickListener() { <--------ERROR

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        //convertfromcur();
        conRate.setText("pressed"); <--------testing
    }
      };

        private void convertfromcur() {
    // TODO Auto-generated method stub
    try {
        double val = Double.parseDouble(ratetv.getText().toString());
        double val2 = Double.parseDouble(fromrate.getText().toString());
        double com = (val / val2);

        conRate.setText("RATE:" + com);


    } catch (Exception e) {
        // TODO: handle exception
        conRate.setText("Error");
    }
}



private void converttocur() {
    // TODO Auto-generated method stub
    try {
        double val = Double.parseDouble(ratetv.getText().toString());
        double val2 = Double.parseDouble(torate.getText().toString());
        double com = (val * val2);          
        conRate.setText("RATE:" + com);         

    } catch (Exception e) {
        // TODO: handle exception
        conRate.setText("Error");
    }

}

private void fillViews() {
    // TODO Auto-generated method stub
    try{
        sampleDB=this.openOrCreateDatabase(dbName, MODE_PRIVATE, null);
        Cursor c = sampleDB.rawQuery("Select * from " +tableName+" where id                      ?", new String[] {String.valueOf(rowID)}); 
        if(c!=null && c.moveToFirst()==true){               
            String code=c.getString(c.getColumnIndex("Code"));
            String sign=c.getString(c.getColumnIndex("Sign"));
            String rate=c.getString(c.getColumnIndex("Rate"));
            codetv.setText(code);
            signtv.setText(sign);
            ratetv.setText(rate);         
        }           
    }
    catch(SQLException e){
        Log.e(getClass().getSimpleName(),"Could not open database");
    }
    finally{
        if(sampleDB!=null){
            sampleDB.close();
        }
    }
}

private void setViews() {
    // TODO Auto-generated method stub
    codetv=(TextView)findViewById(R.id.code);
    signtv=(TextView)findViewById(R.id.sign);
    ratetv=(TextView)findViewById(R.id.rate);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.viewtask,menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub

    switch(item.getItemId()){
    case R.id.edit:
        getEdit();
        return true;
    case R.id.delete:
        getDelete();
        return true;
    default:
         return super.onOptionsItemSelected(item);
    }
}

private void getDelete() {
    //TODO Auto-generated method stub
    try{
        sampleDB=this.openOrCreateDatabase(dbName, MODE_PRIVATE,null);
        sampleDB.delete(tableName, "id= "+rowID,null);
    }

    catch(SQLException e){
        Log.e(getClass().getSimpleName(),"Could not open dB");
    }
    finally {
        if(sampleDB!=null){
            sampleDB.close();
        }

    }
}

private void getEdit(){
    //TODO Auto-generated method stub
    Intent addEdit=new Intent(this,AddEdit.class);
    addEdit.putExtra("ID",rowID);
    addEdit.putExtra("code",codetv.getText().toString());
    addEdit.putExtra("sign",signtv.getText().toString());
    addEdit.putExtra("rate",ratetv.getText().toString());
    startActivity(addEdit);
}



@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

}

   }

そのため、ボタンのクリック時にエラーが発生し、このエラーメッセージが表示されます

  E/AndroidRuntime(2524): FATAL EXCEPTION: main
  E/AndroidRuntime(2524): java.lang.NullPointerException
  E/AndroidRuntime(2524):at .example.assignment.ViewRate.converttocur(ViewRate.java:96)
  E/AndroidRuntime(2524):at com.example.assignment.ViewRate.access$0(ViewRate.java:86)
  E/AndroidRuntime(2524):at com.example.assignment.ViewRate$1.onClick(ViewRate.java:55)
  E/AndroidRuntime(2524):   at android.view.View.performClick(View.java:4202)
  E/AndroidRuntime(2524):   at android.view.View$PerformClick.run(View.java:17340)
  E/AndroidRuntime(2524):   at android.os.Handler.handleCallback(Handler.java:725)
  E/AndroidRuntime(2524):   at android.os.Handler.dispatchMessage(Handler.java:92)
  E/AndroidRuntime(2524):   at android.os.Looper.loop(Looper.java:137)
  E/AndroidRuntime(2524):at android.app.ActivityThread.main(ActivityThread.java:5039)
  E/AndroidRuntime(2524):at java.lang.reflect.Method.invokeNative(Native Method)
  E/AndroidRuntime(2524):   at java.lang.reflect.Method.invoke(Method.java:511)
  E/AndroidRuntime(2524):at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
   E/AndroidRuntime(2524):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
 E/AndroidRuntime(2524):    at dalvik.system.NativeStart.main(Native Method)

ここに他のlogcatがあります

  E/AndroidRuntime(2743): FATAL EXCEPTION: main
  E/AndroidRuntime(2743): java.lang.NullPointerException
  E/AndroidRuntime(2743):   at com.example.assignment.ViewRate$1.onClick(ViewRate.java:56)
  E/AndroidRuntime(2743):   at android.view.View.performClick(View.java:4202)
  E/AndroidRuntime(2743):   at android.view.View$PerformClick.run(View.java:17340)
  E/AndroidRuntime(2743):   at android.os.Handler.handleCallback(Handler.java:725)
  E/AndroidRuntime(2743):   at android.os.Handler.dispatchMessage(Handler.java:92)
  E/AndroidRuntime(2743):   at android.os.Looper.loop(Looper.java:137)
  E/AndroidRuntime(2743):   at android.app.ActivityThread.main(ActivityThread.java:5039)
  E/AndroidRuntime(2743):   at java.lang.reflect.Method.invokeNative(Native Method)
  E/AndroidRuntime(2743):   at java.lang.reflect.Method.invoke(Method.java:511)
  E/AndroidRuntime(2743):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
 E/AndroidRuntime(2743):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  E/AndroidRuntime(2743):   at dalvik.system.NativeStart.main(Native Method)
4

5 に答える 5

1

次の値のいずれかが null です。

  • ratetv
  • torate
  • ratetv.getText()
  • torate.getText()

null を逆参照することはできません (基本的に、null 値でメソッドを呼び出すことはできません) NullPointerException

于 2013-06-04T04:23:14.880 に答える
1

私はあなたのコードを見ました.onCreateメソッドの下でこの行を見逃してTextview conRateを初期化したため、デフォルトではnullで初期化し、conRate.setText( "")を参照しています.conRateはnullです.

conRate =(TextView)findViewById(R.id.conRate);

これがあなたを助けることを願っています... :)

于 2013-06-04T04:42:16.123 に答える
0

あなたはあなたの次のことを見逃していると思いますonCreate()

torate = (EditText) findViewById(R.id.to_rate) 
ratetv = (TextView) findViewById(R.id.rate_tv)
于 2013-06-04T04:30:13.350 に答える
0

引用符

コードを変更するだけです::

引用符

アクティビティに onClickListener を実装したので、確実にオーバーライドメソッド onClick を取得するので、そのメソッドでボタンクリックイベントを条件付きで記述します

 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 if(v.getId == R.id.convertto)
 {
   //Here write you code when converTo button Clicked
 }
 else if(v.getId == R.id.converfrom)
 {
    //Here write your code when converfrom button clicked 
 }

}

于 2013-06-04T07:12:03.767 に答える