2014-03-03 1 views
-1

그래서 학생을위한 간단한 클래스 관리자를 만들고 있는데,이 문제를 파악할 수 없습니다. 주 활동에는 수업을 추가하는 버튼이 있습니다.이 버튼을 누르면 학생 활동 추가로 이동하는 학생 추가 버튼이있는 수업 활동 추가로 이동합니다. 학생을 구할 때 클래스 활동 추가로 돌아가 학생 명을 명부 목록보기에 추가하면됩니다. 그러나 어떤 이유로 클래스를 저장할 때 주 활동으로 돌아올 때 nullPointerException이 발생합니다. 아무도 아이디어가 있다면 정말 도움을 주시면 감사하겠습니다. 클래스 추가 활동 여기NullPointerException 학생 클래스 구성 도우미

public class MainActivity extends Activity { 

ListView classList; 
Button addClass; 
ArrayAdapter<String> adapterClass; 
ArrayList<Class> currClasses = new ArrayList<Class>(); 
ArrayList<String> currClassNames = new ArrayList<String>(); 
ClassesSingleton myClasses; 
int REQUEST_CODE_ADD = 318; 
int REQUEST_CODE_EDIT = 319; 

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

    classList = (ListView) findViewById(R.id.classList); 
    final Context context = this; 
    adapterClass = new ArrayAdapter<String>(this, R.layout.single_list_item, R.id.label, currClassNames); 

    classList.setAdapter(adapterClass); 

    addClass = (Button) this.findViewById(R.id.addClass); 

    classList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView <?> arg0, View view, int position, long id){ 
      Intent intent = new Intent(MainActivity.this, ShowClass.class); 
      startActivityForResult(intent, REQUEST_CODE_EDIT); 
     } 
    }); 

    addClass.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0){ 
      Intent intent = new Intent(MainActivity.this, AddClass.class); 
      startActivityForResult(intent, REQUEST_CODE_ADD); 
     } 
    }); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 

    if(resultCode == RESULT_OK && requestCode == REQUEST_CODE_ADD){ 
     Class newClass = new Class(); 
     if(data.hasExtra("className")){ 
      newClass.setName(data.getExtras().getString("name")); 
     } 
     if(data.hasExtra("number")){ 
      newClass.setNumber(data.getExtras().getInt("number")); 
     } 
     if(data.hasExtra("students")){ 
      ArrayList<Student> s = data.getExtras().getParcelableArrayList("students"); 
      newClass.setStudents(s); 
     } 
     if(data.hasExtra("names")){ 
      ArrayList<String> sn = data.getExtras().getStringArrayList("names"); 
      newClass.setStudentNames(sn); 
     } 

     myClasses = ClassesSingleton.getInstance(); 
     updateClassList(newClass, newClass.getName()); 
     myClasses.setClassArray(currClasses); 
     myClasses.setClassNames(currClassNames); 
    } 

    //else if(resultCode == RESULT_OK && requestCode == REQUEST_CODE_EDIT){ 

    //} 
} 

public void updateClassList(Class n, String s){ 

    adapterClass = null; 
    currClasses.add(n); 
    currClassNames.add(s); 
    adapterClass = new ArrayAdapter<String>(this, R.layout.single_list_item, R.id.label, currClassNames); 
    classList.setAdapter(adapterClass); 
    adapterClass.notifyDataSetChanged(); 
} 
} 

것 :

: 여기
public class AddStudent extends Activity{ 

EditText studentName, studentId; 
Button saveStudent, cancelStudent; 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.new_student); 

    studentName = (EditText) findViewById(R.id.newStudentName); 
    studentId = (EditText) findViewById(R.id.newStudentId); 
    saveStudent = (Button) findViewById(R.id.confirmStudentAdd); 
    cancelStudent = (Button) findViewById(R.id.cancelStudent); 

    saveStudent.setOnClickListener(new OnClickListener() { 
     public void onClick(View arg0){ 
      Intent data = new Intent(); 
      int idData = 0; 

      if(studentName.getText().toString().matches("") != true && studentId.getText().toString().matches("") != true){ 
       String nameData = studentName.getText().toString(); 
       String idStr = studentId.getText().toString(); 

       boolean intTrue = true; 
       try{ 
        idData = Integer.parseInt(idStr); 
       }catch(NumberFormatException e){ 
        Toast.makeText(AddStudent.this, "Please be sure to enter a numeric value in the ID field.", Toast.LENGTH_LONG).show(); 
        intTrue = false; 
       } 

       if(intTrue){ 
        data.putExtra("name", nameData); 
        data.putExtra("id", idData); 
        setResult(RESULT_OK, data); 
        finish(); 
       } 
      } 
      else{ 
       Toast.makeText(AddStudent.this, "Don't leave your student name or ID field blank!", Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
} 
} 

는 스택 추적입니다 : 여기
public class AddClass extends Activity{ 

Button addStudent, saveClass, cancelClass; 
EditText className, classNumber; 
ListView studentList; 
ArrayAdapter<String> adapterStudent; 
ArrayList<Student> currStudents = new ArrayList<Student>(); 
ArrayList<String> studNames = new ArrayList<String>(); 
int REQUEST_CODE_ADDSTU = 317; 
int REQUEST_CODE_EDSTU = 316; 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    Intent intent = getIntent(); 
    setContentView(R.layout.new_class); 

    addStudent = (Button) findViewById(R.id.addStudent); 
    saveClass = (Button) findViewById(R.id.confirmClassAdd); 
    cancelClass = (Button) findViewById(R.id.cancelClass); 
    className = (EditText) findViewById(R.id.newClassName); 
    classNumber = (EditText) findViewById(R.id.newClassNumber); 
    studentList = (ListView) findViewById(R.id.newStudentList); 
    adapterStudent = new ArrayAdapter<String>(this, R.layout.single_list_item, R.id.label, studNames); 

    studentList.setAdapter(adapterStudent); 

    studentList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView <?> arg0, View view, int position, long id){ 
      Intent intent2 = new Intent(AddClass.this, EditStudent.class); 
      startActivityForResult(intent2, REQUEST_CODE_EDSTU); 
     } 
    }); 

    addStudent.setOnClickListener(new OnClickListener() { 

     public void onClick(View arg0){ 
      Intent intent2 = new Intent(AddClass.this, AddStudent.class); 
      startActivityForResult(intent2, REQUEST_CODE_ADDSTU); 
     } 
    }); 

    saveClass.setOnClickListener(new OnClickListener() { 
     public void onClick(View arg0){ 
      Intent data = new Intent(); 
      int numData = 0; 
      if(className.getText().toString().matches("") != true && classNumber.getText().toString().matches("") != true && currStudents.isEmpty() != true && studNames.isEmpty() != true){ 
       String nameData = className.getText().toString(); 
       String numStr = classNumber.getText().toString(); 
       ArrayList<Student> students = currStudents; 
       ArrayList<String> studentNames = studNames; 

       boolean intTrue = true; 
       try{ 
        numData = Integer.parseInt(numStr); 
       }catch(NumberFormatException e){ 
        Toast.makeText(AddClass.this, "Please be sure to enter a numberic value in the number field.", Toast.LENGTH_LONG).show(); 
        intTrue = false; 
       } 

       if(intTrue){ 
        data.putExtra("className", nameData); 
        data.putExtra("number", numData); 
        data.putStringArrayListExtra("names", studentNames); 
        data.putParcelableArrayListExtra("students", students); 
        setResult(RESULT_OK, data); 
        finish(); 
       } 
      } 
      else{ 
       Toast.makeText(AddClass.this, "Don't leave your class name, number field, or student roster blank!", Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
} 

//onActivityResult callback 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 

    if(resultCode == RESULT_OK && requestCode == REQUEST_CODE_ADDSTU){ 
     Student newStudent = new Student(); 
     if(data.hasExtra("name")){ 
      newStudent.setName(data.getExtras().getString("name")); 
     } 
     if(data.hasExtra("id")){ 
      newStudent.setId(data.getExtras().getInt("id")); 
     } 

     updateStudentList(newStudent, newStudent.getName()); 
    } 
} 

public void updateStudentList(Student s, String n){ 
    adapterStudent = null; 
    currStudents.add(s); 
    studNames.add(n); 
    adapterStudent = new ArrayAdapter<String>(this, R.layout.single_list_item, R.id.label, studNames); 
    studentList.setAdapter(adapterStudent); 
    adapterStudent.notifyDataSetChanged(); 
} 

} 

가 추가 학생 활동의

여기에 주요 활동입니다

FATAL EXCEPTION: main 
Process: com.example.congelassign2, PID: 1664 
java.lang.NullPointerException 
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
at android.widget.AbsListView.obtainView(AbsListView.java:2263) 
at android.widget.ListView.makeAndAddView(ListView.java:1790) 
at android.widget.ListView.fillDown(ListView.java:691) 
at android.widget.ListView.fillFromTop(ListView.java:752) 
at android.widget.ListView.layoutChildren(ListView.java:1616) 
at android.widget.AbsListView.onLayout(AbsListView.java:2091) 
at android.view.View.layout(View.java:14785) 
at android.view.ViewGroup.layout(ViewGroup.java:4631) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
at android.view.View.layout(View.java:14785) 
at android.view.ViewGroup.layout(ViewGroup.java:4631) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
at android.view.View.layout(View.java:14785) 
at android.view.ViewGroup.layout(ViewGroup.java:4631) 
at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374) 
at android.view.View.layout(View.java:14785) 
at android.view.ViewGroup.layout(ViewGroup.java:4631) 
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
at android.view.View.layout(View.java:14785) 
at android.view.ViewGroup.layout(ViewGroup.java:4631) 
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1985) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1742) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5582) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
at android.view.Choreographer.doFrame(Choreographer.java:532) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4998) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593) 
at dalvik.system.NativeStart.main(Native Method) 
+0

내 친구를 디버그하십시오. – NewUser

+1

어떤 메소드가 예외를 throw합니다 .Exception 스택 트레이스가 명확하지 않습니다. – Kick

+0

어떤 라인에서 에러가 발생 했습니까 ?? – Piyush

답변

0

'ListView classList'가 onCreate 메소드에서 사용 중이므로 초기화되지 않았습니다.

0

ArrayAdapter 클래스에 맞춤 레이아웃을 표시하려고하기 때문에 표시 오류가 발생했습니다. ArrayAdapter에서 사용자 정의 레이아웃을 사용하려면 ArrayAdapter 클래스를 확장하고 해당 어댑터 클래스에 레이아웃을 확장하는 별도의 사용자 정의 어댑터 클래스를 작성해야합니다.

레이아웃을 부 풀리려는 방식이 잘못되어 오류가 발생하는 이유는 무엇입니까 at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 데이터가 목록보기에 바인딩되도록 Android 레이아웃을 참조합니다.

또한 ArrayList ArrayList<String> currClassNames = new ArrayList<String>();ArrayList<String> studNames = new ArrayList<String>();은 모두 null입니다.