2012-08-05 19 views
0

다른 데이터베이스와 함께 데이터베이스를 여는 즉시 응용 프로그램이 NullPointerException과 충돌합니다.활동을 열 때 NullPointerException이 발생했습니다.

이 작업 (WorkoutEdit.java)을 여는 버튼을 누르면 즉시 충돌이 발생합니다. 여기

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.text.InputType; 
import android.view.View; 
import android.view.WindowManager; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.RadioGroup; 
import android.widget.RadioGroup.OnCheckedChangeListener; 
import android.widget.TextView; 
import android.widget.ViewFlipper; 

public class WorkoutEdit extends Activity { 

    public TextView mTitleText; 
    //private EditText mBodyText; 
    private Long mRowId; 
    private StrongDbAdapter mDbHelper; 
    private ViewFlipper viewFlipper; 
    public TextView squats; 
    public boolean workoutA; 
    public String workoutState; 
    //private double rowId = mRowId; 
    public String squatLabel; 
    public Button confirmButton; 




    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.workout_edit3); 

     mDbHelper = new StrongDbAdapter(this); 


      mDbHelper.open(); 


     setTitle(R.string.edit_workout); 

     mTitleText = (TextView) findViewById(R.id.workout_row); 
     //mBodyText = (EditText) findViewById(R.id.body); 
     viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper); 
     squats = (TextView) findViewById(R.id.squatLabel); 
     final AlertDialog.Builder alert = new AlertDialog.Builder(this); 
     squatLabel = squats.getText().toString(); 



     confirmButton = (Button) findViewById(R.id.confirmButton); 

     mRowId = (savedInstanceState == null) ? null : 
      (Long) savedInstanceState.getSerializable(StrongDbAdapter.KEY_ROWID); 
     if (mRowId == null) { 

      getWorkoutState(); 
      if(workoutA == true){ 
       workoutState = "WorkoutA"; 
      }else{ 
       workoutState = "WorkoutB"; 
      } 

      Bundle extras = getIntent().getExtras(); 
      mRowId = extras != null ? extras.getLong(StrongDbAdapter.KEY_ROWID) 
            : null; 
     } 


     // populateFields(); 

     confirmButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View view) { 
       setResult(RESULT_OK); 
       finish(); 
      } 

     }); 



     squats.setOnClickListener(new View.OnClickListener() { 

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

       alert.setTitle("Squats"); 
       alert.setMessage("Message"); 

       //AlertDialog dialog = alert.create(); 

       //set an EditText view to get user input 
       final EditText input = new EditText(aMethod()); 
       input.setInputType(InputType.TYPE_CLASS_NUMBER); 

       //dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 

       alert.setView(input); 

       alert.setPositiveButton("Ok", new DialogInterface.OnClickListener(){ 
        public void onClick(DialogInterface dialog, int whichButton){ 
         String value = input.getText().toString(); 
         //Do something with value 

         value = "Squats - " + value; 

         squats.setText(value); 

        }       
       }); 

       alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){ 
        public void onClick(DialogInterface dialog, int whichButton){ 
         //Cancelled 
        } 
       }); 

       AlertDialog dialog = alert.create(); 

       dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 



       //alert.show(); 
       dialog.show(); 

      } 
     }); 


     RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radgroup1); 




     radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
      public void onCheckedChanged(RadioGroup group, int checkedId) 
      { 
       switch(checkedId) 
       { 
        case(R.id.rad2): 
         viewFlipper.setDisplayedChild(1); 
        break; 
        case(R.id.rad3): 
         viewFlipper.setDisplayedChild(2); 
        break; 
        default: 
         viewFlipper.setDisplayedChild(0); 
        break; 
       } 
      } 
     });  

     //saveState(); 



     if((Long)(mRowId-1) == null){ 
      squats.setText("Squats - 45"); 
     }else{ 
      Cursor note = mDbHelper.fetchNote((Long)(mRowId-1)); 
      startManagingCursor(note); 
      squats.setText(note.getString(
        note.getColumnIndexOrThrow(StrongDbAdapter.SQUAT_LABEL))); 
      String squat = squats.getText().toString(); 
      int squatsWeight = Integer.parseInt(squat); 
      squatsWeight = squatsWeight + 5 ; 
      squats.setText("Squats - " + squatsWeight); 
     } 




//end of onCreate 
    } 
    /* 
    private void populateFields() { 
     if (mRowId != null) { 
      Cursor note = mDbHelper.fetchNote(mRowId); 
      startManagingCursor(note); 
      mTitleText.setText(note.getString(
        note.getColumnIndexOrThrow(StrongDbAdapter.KEY_TITLE))); 
      workoutState=(note.getString(
        note.getColumnIndexOrThrow(StrongDbAdapter.WORKOUT_STATE))); 
      squats.setText(note.getString(note.getColumnIndexOrThrow(StrongDbAdapter.SQUAT_LABEL))); 
     } 
    } 
    */ 


    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     //saveState(); 
     //outState.putSerializable(StrongDbAdapter.KEY_ROWID, mRowId); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     //saveState(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     //populateFields(); 
    } 



    //Saves all the data to the database 
    private void saveState() { 
     String title = workoutState; 
     String squatLabel = squats.getText().toString(); 


     if (mRowId == null) { 
      long id = mDbHelper.createNote(title, squatLabel); 
      if (id > 0) { 
       mRowId = id; 
      } 
     } else { 
      mDbHelper.updateNote(mRowId, title); 
     } 
    }  

    public Context aMethod(){ 
     Context actContext = this; 
     return actContext; 
    } 

    public boolean getWorkoutState(){ 
     if(workoutA!=false){ 
      workoutA = true; 
     }else{ 
      workoutA = false; 
     } 


     return workoutA; 

    } 




} 

내 로그 캣 로그입니다 :

08-04 20:12:27.682: E/AndroidRuntime(23360): FATAL EXCEPTION: main 
08-04 20:12:27.682: E/AndroidRuntime(23360): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.anapoleon.android.stronglifts/com.anapoleon.android.stronglifts.WorkoutEdit}: java.lang.NullPointerException 
08-04 20:12:27.682: E/AndroidRuntime(23360): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1872) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at android.app.ActivityThread$H.handleMessage(ActivityThread.java) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at android.os.Handler.dispatchMessage(Handler.java) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at android.os.Looper.loop(Looper.java) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at android.app.ActivityThread.main(ActivityThread.java:4385) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at java.lang.reflect.Method.invokeNative(Native Method) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at java.lang.reflect.Method.invoke(Method.java:507) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at dalvik.system.NativeStart.main(Native Method) 
08-04 20:12:27.682: E/AndroidRuntime(23360): Caused by: java.lang.NullPointerException 
08-04 20:12:27.682: E/AndroidRuntime(23360): at com.anapoleon.android.stronglifts.WorkoutEdit.onCreate(WorkoutEdit.java:166) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java) 
08-04 20:12:27.682: E/AndroidRuntime(23360): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836) 
08-04 20:12:27.682: E/AndroidRuntime(23360): ... 11 more 
+0

WorkoutEdit.java에서 166 행을 지적 할 수 있습니까? 그 곳에서 당신의 NullPointerException은 ... – BrainCrash

+0

Ahhh this "if ((Long) (mRowId-1) == null) {"데이터베이스의 이전 값이 null인지 그리고 그것을 얻는 유일한 방법인지를 확인해야했습니다 컴파일 할 때 Long에 캐스팅했습니다. – user1576752

+0

해석상 오류가 있습니다. "Long mRowId"는 배열이 아닙니다. 이전 값을 살펴보고 확인할 수 있습니다. –

답변

0

그래서 ... 당신의 mRowId라는이 코드에서 null로 설정 될 수 있지만,이 라인에서 널 (null) 상태의 당신은 확인하지 않습니다 166

또한 (Long) (mRowId-1) == null은 사실이 아님에 유의하십시오.

+0

나는 당신을 오해할지 모르지만, 166 행에서 id * before *가 현재 mRowId가 null인지 알아 내려고하므로 표준 값을 설정하거나 이전 mRowId의 값을 기반으로 값을 만들 수 있습니다. – user1576752

+1

컴파일러가 null-1 (mRowId-1)을 발견하면 NullPointerException을 반환합니다 ... – BrainCrash

0

라인 (166)에있는 당신의 조건은 어떤 의미가 없습니다 : mRowId라는가 null가 아닌

(Long)(mRowId-1) == null 

경우 다음 (Long)(mRowId-1) 수 없을 것이다, 그러나 경우 mRowId라는 다음, 입니다 null - 1가 올바르지 않으므로 NullPointerException을 수신하게됩니다.

그래서 당신은 현재의 mRowId 당신은 아마 다른 구성을 사용하려면

전에

ID의 어떤 종류를 얻을 수 없습니다.

+0

고맙습니다. 해결 방법을 발견했습니다. – user1576752

관련 문제