нулявы ўказальнік спасылкі АНДРОІД ява

Гэй, хлопцы, у мяне ёсць пацешная маленькая памылка, я спрабаваў зразумець, у цяперашні час мець на ўвазе, я студэнт. Хацелася б ведаць, чаму гэта адбываецца Ill дысплей класа і дзе сустракаецца памылка. Thankyou загадзя.

                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)
1
Што ў ViewRate.java, нумар радка 96. Вы, здаецца, атрымліваю NullPointerException на гэтай лініі, як у часопісе.
дададзена аўтар midhunhk, крыніца
conRate роўна нулю вы не спасылаецеся яго
дададзена аўтар prvn, крыніца
conRate роўна нулю вы не спасылаецеся яго
дададзена аўтар prvn, крыніца

9 адказы

Адно з гэтых значэнняў роўна нуля:

  • ratetv
  • torate
  • <�Літый> ratetv.getText() </літый> <�Літый> torate.getText() </літый>

Вы не можаце разнаймення NULL (па сутнасці, вы не можаце выклікаць метады нулявога значэння), так што вы атрымаеце NullPointerException .

1
дададзена
Ваш стэк кажа мне, у адваротным выпадку - калі ваш код не выклікаць гэты метад, ён не дасягнуў бы, што ўмовы NPE.
дададзена аўтар Makoto, крыніца
Добра дрэнна паспрабаваць і закомментируйте як пераўтваральныя метады і паспрабуйце пстрычка? ок я, так што я зрабіў гэта. І вынік сапраўды гэтак жа
дададзена аўтар user1778625, крыніца
секундочку ў кодзе вышэй я праверка толькі націскам кнопкі. я не рэалізавалі гэтыя метады. Я ведаю гэта, таму што я тэставаў толькі кнопку мышы і прыходзіць памылка. Акрамя таго, мой ratetv становіцца запоўнены пад нагрузкай .... і torate не павiнна працаваць, бо я не выклік метаду.
дададзена аўтар user1778625, крыніца

Адно з гэтых значэнняў роўна нуля:

  • ratetv
  • torate
  • <�Літый> ratetv.getText() </літый> <�Літый> torate.getText() </літый>

Вы не можаце разнаймення NULL (па сутнасці, вы не можаце выклікаць метады нулявога значэння), так што вы атрымаеце NullPointerException .

1
дададзена
Ваш стэк кажа мне, у адваротным выпадку - калі ваш код не выклікаць гэты метад, ён не дасягнуў бы, што ўмовы NPE.
дададзена аўтар Makoto, крыніца
секундочку ў кодзе вышэй я праверка толькі націскам кнопкі. я не рэалізавалі гэтыя метады. Я ведаю гэта, таму што я тэставаў толькі кнопку мышы і прыходзіць памылка. Акрамя таго, мой ratetv становіцца запоўнены пад нагрузкай .... і torate не павiнна працаваць, бо я не выклік метаду.
дададзена аўтар user1778625, крыніца
Добра дрэнна паспрабаваць і закомментируйте як пераўтваральныя метады і паспрабуйце пстрычка? ок я, так што я зрабіў гэта. І вынік сапраўды гэтак жа
дададзена аўтар user1778625, крыніца

Я бачыў ваш код, вы прапусцілі гэтую лінію пад метад OnCreate для ініцыялізацыі <�моцны> TextView conRate таму па змаўчанні ён ініцыялізаваць нулём і вы маеце на ўвазе <�моцны> conRate.setText ( «») дзе <�моцны> conRate з'яўляецца нуль-то чаму вы атрымліваць NullPointerException на OnClick.

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

Спадзяюся, што гэта дапаможа ... :)

1
дададзена
зацьменне платформа не мова, вы можаце закадаваць у Java, C# рубін. Што б вы хацелі ў зацьменні.
дададзена аўтар Sean F, крыніца
THANKYOU СТОЛЬКО ... я хачу цябе пацалаваць гэты адказ хлопчыкаў з'яўляецца найбольш простым і відавочным. О, колькі я люблю Csharp над зацьменнем. яшчэ раз дзякую Вас.
дададзена аўтар user1778625, крыніца

Я бачыў ваш код, вы прапусцілі гэтую лінію пад метад OnCreate для ініцыялізацыі <�моцны> TextView conRate таму па змаўчанні ён ініцыялізаваць нулём і вы маеце на ўвазе <�моцны> conRate.setText ( «») дзе <�моцны> conRate з'яўляецца нуль-то чаму вы атрымліваць NullPointerException на OnClick.

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

Спадзяюся, што гэта дапаможа ... :)

1
дададзена
зацьменне платформа не мова, вы можаце закадаваць у Java, C# рубін. Што б вы хацелі ў зацьменні.
дададзена аўтар Sean F, крыніца
THANKYOU СТОЛЬКО ... я хачу цябе пацалаваць гэты адказ хлопчыкаў з'яўляецца найбольш простым і відавочным. О, колькі я люблю Csharp над зацьменнем. яшчэ раз дзякую Вас.
дададзена аўтар user1778625, крыніца

I think you have missed the following in your onCreate()

torate = (EditText) findViewById(R.id.to_rate) 
ratetv = (TextView) findViewById(R.id.rate_tv)
0
дададзена

I think you have missed the following in your onCreate()

torate = (EditText) findViewById(R.id.to_rate) 
ratetv = (TextView) findViewById(R.id.rate_tv)
0
дададзена

Plz Спачатку праверце ўсе кампаненты карыстацкага інтэрфейсу спасылаецца таксама ў файле Java азначае, што ў дзейнасці. гэта можа быць месца, дзе вы атрымаеце NPE.

Таксама вы звяртаецеся пільную значэнне ад іншай дзейнасці ў OnCreate() метад так ОЛЗЛИ пацвердзіць, што вы атрымаеце значэнне ў намеры або атрымаць нулявое значэнне

0
дададзена
Я прапаную вам, чаму вы зрабіць ваш код настолькі складаным rether ваш код вельмі просты.
дададзена аўтар Chirag Limbachiya, крыніца
Я атрымліваю значэнне, таму што на viewrate.java нагрузкі: мой TextView з'яўляецца запаўненне я магу паказаць гэта на скрыншоце. Гэтыя памылкі гэта толькі пачаліся, калі я ўставіў кнопку ён у мой праект .... я адчуваю сябе страціў лол
дададзена аўтар user1778625, крыніца

Plz Спачатку праверце ўсе кампаненты карыстацкага інтэрфейсу спасылаецца таксама ў файле Java азначае, што ў дзейнасці. гэта можа быць месца, дзе вы атрымаеце NPE.

Таксама вы звяртаецеся пільную значэнне ад іншай дзейнасці ў OnCreate() метад так ОЛЗЛИ пацвердзіць, што вы атрымаеце значэнне ў намеры або атрымаць нулявое значэнне

0
дададзена
Я прапаную вам, чаму вы зрабіць ваш код настолькі складаным rether ваш код вельмі просты.
дададзена аўтар Chirag Limbachiya, крыніца
Я атрымліваю значэнне, таму што на viewrate.java нагрузкі: мой TextView з'яўляецца запаўненне я магу паказаць гэта на скрыншоце. Гэтыя памылкі гэта толькі пачаліся, калі я ўставіў кнопку ён у мой праект .... я адчуваю сябе страціў лол
дададзена аўтар user1778625, крыніца
<�Р> Blockquote </р>

проста змяніць код ::

<�Р> Blockquote </р>

Вы рэалізавалі 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 
 }

}

0
дададзена