마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

로그캣을 보고 찾아 봤지만...

0 추천
버튼을 누르면 DB에 인설트 할수 있는 코드를 찾아서 제게 맞게 수정하고 실행을 시켜봤는데 에러가 나면서 켜지질 않는다고 그러더라구요 ㅠㅠ Logcat을 보면된다구 인터넷에 써있어서 찾아보고 나온 exception 에러에 대해서도 찾아봤지만 도저히 모르겟더라구요.. 
 
좀 도와주실수있나요?
 
저의 소스 코드 입니다.
 
package com.study.account;

import java.io.InputStream;
import java.net.URL;
import java.net.URLEncoder;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.app.AlertDialog;
import android.content.DialogInterface;

public class JoinActivity extends Activity {
private final String SERVER_ADDRESS = "http://1.234.6.145/wintest";
EditText Email  =  (EditText)findViewById(R.id.editText1);
    EditText Password  =  (EditText)findViewById(R.id.editText2);
    EditText Passwordcheck  =  (EditText )findViewById(R.id.EditText01);
    EditText Name =  (EditText)findViewById(R.id.editText3);
    Button Join = (Button)findViewById(R.id.joinOkay);
    Button Cancel = (Button)findViewById(R.id.Cancel);
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       // 타이틀이 보이지 않도록 함
       requestWindowFeature(Window.FEATURE_NO_TITLE);
       setContentView(R.layout.activity_join);
       
       Cancel.setOnClickListener(new OnClickListener() { 
        public void onClick(View v) {

AlertDialog dialog = createDialogBox();
dialog.show();


}                                                                                                                                                    
});

       
       
       Join.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
                
               if( Email.getText().toString().equals("") ||
                Password.getText().toString().equals("")||
                Passwordcheck.getText().toString().equals("")||
                Name.getText().toString().equals("") ) { //이름이나 가격중에 하나라도 입력이 안돼있을때
                   Toast.makeText(JoinActivity.this,
                           "이름이나 가격을 입력하세요", Toast.LENGTH_SHORT).show();
                   return;
               }
                    
                   runOnUiThread(new Runnable() {
                        
                       public void run() {
                           // TODO Auto-generated method stub
                           String email = Email.getText().toString();
                           String pwd= Password.getText().toString();
                           String pwdcheck = Passwordcheck.getText().toString();
                           String name = Name.getText().toString();
                            
                           try {
                               URL url = new URL(SERVER_ADDRESS + "/insert.php?"
                                       + "userid=" + URLEncoder.encode(email, "UTF-8")
                                       + "&userpassword=" + URLEncoder.encode(pwd, "UTF-8")
                                       + "&username=" + URLEncoder.encode(name, "UTF-8")); //변수값을 UTF-8로 인코딩하기 위해 URLEncoder를 이용하여 인코딩함
                               url.openStream(); //서버의 DB에 입력하기 위해 웹서버의 insert.php파일에 입력된 이름과 가격을 넘김
                                
                               String result = getXmlData("insertresult.xml", "result"); //입력 성공여부
                                
                               if(result.equals("1")) { //result 태그값이 1일때 성공
                                   Toast.makeText(JoinActivity.this,
                                           "DB insert 성공", Toast.LENGTH_SHORT).show();
                                    
                                   Email.setText("");
                                   Password.setText("");Name.setText("");
                               }
                               else //result 태그값이 1이 아닐때 실패
                                   Toast.makeText(JoinActivity.this,
                                           "DB insert 실패", Toast.LENGTH_SHORT).show();
                           } catch(Exception e) {
                               Log.e("Error", e.getMessage());
                           }
                       }


                   });

}
       });
}



private String getXmlData(String filename, String str) { //태그값 하나를 받아오기위한 String형 함수
       String rss = SERVER_ADDRESS + "/";
       String ret = "";
        
       try { //XML 파싱을 위한 과정
           XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
           factory.setNamespaceAware(true);
           XmlPullParser xpp = factory.newPullParser();
           URL server = new URL(rss + filename);
           InputStream is = server.openStream();
           xpp.setInput(is, "UTF-8");
            
           int eventType = xpp.getEventType();
            
           while(eventType != XmlPullParser.END_DOCUMENT) {
               if(eventType == XmlPullParser.START_TAG) {
                   if(xpp.getName().equals(str)) { //태그 이름이 str 인자값과 같은 경우
                       ret = xpp.nextText();
                   }
               }
               eventType = xpp.next();
           }
       } catch(Exception e) {
           Log.e("Error", e.getMessage());
       }
        
       return ret;
   }
}

로그캣 정보입니다.

익명사용자 님이 2014년 7월 24일 질문
2014년 7월 24일 수정
질문하실때는 로그를 같이 올리세요.
그리고 어떤 익셉션이 났는지도 말하구요. 사실 무슨 파일 몇번째 라인에서 어떤 예외상황이 발생했다고 말해주는게 로그입니다. 로그만 볼줄 알아도 질문이 필요없어지지요.
지금 다시 올렸습니다 ..ㅠㅠ

2개의 답변

0 추천

24라인에서 NullPointerException 났습니다.

EditText Email  =  (EditText)findViewById(R.id.editText1);
    EditText Password  =  (EditText)findViewById(R.id.editText2);
    EditText Passwordcheck  =  (EditText )findViewById(R.id.EditText01);
    EditText Name =  (EditText)findViewById(R.id.editText3);
    Button Join = (Button)findViewById(R.id.joinOkay);
    Button Cancel = (Button)findViewById(R.id.Cancel);
 
부분이 다 잘 못 되었네요.. 
 
findViewById를  클래스 변수 선언부에서 호출해서 오류가 난 듯 합니다.
변수만 선언하고 findViewById로 객체 찾는것은 onCarete 메소드에서 하게 수정하세요

public class JoinActivity extends Activity {

private final String SERVER_ADDRESS = "http://1.234.6.145/wintest";
EditText Email  ;
    EditText Password ;
    EditText Passwordcheck  ;
    EditText Name ;
    Button Join;
    Button Cancel;
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
 
     Password  =  (EditText)findViewById(R.id.editText2);
     Passwordcheck  =  (EditText )findViewById(R.id.EditText01);
     Name =  (EditText)findViewById(R.id.editText3);
     Join = (Button)findViewById(R.id.joinOkay);
     Cancel = (Button)findViewById(R.id.Cancel);
 
   .....
 
사악미소 (65,330 포인트) 님이 2014년 7월 24일 답변
에러가또...답변으로 질문좀 드릴께요ㅠ
0 추천

package com.study.account;

import java.io.InputStream;
import java.net.URL;
import java.net.URLEncoder;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.app.AlertDialog;
import android.content.DialogInterface;

public class JoinActivity extends Activity {
	private final String SERVER_ADDRESS = "http://1.234.6.145/wintest";
	EditText Email;
    EditText Password;
    EditText Passwordcheck;
    EditText Name;
    Button Join;
    Button Cancel;
	 public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        
	        requestWindowFeature(Window.FEATURE_NO_TITLE);
	        
	        Email  =  (EditText)findViewById(R.id.editText1);
	         Password  =  (EditText )findViewById(R.id.editText2);
	        Passwordcheck  =  (EditText )findViewById(R.id.EditText01);
	         Name =  (EditText)findViewById(R.id.editText3);
	        Join = (Button)findViewById(R.id.joinOkay);
	        Cancel = (Button)findViewById(R.id.Cancel);
	        
	        // 타이틀이 보이지 않도록 함
	        
	        
	        
	        Cancel.setOnClickListener(new OnClickListener() { 
	        	public void onClick(View v) {
					
					AlertDialog dialog = createDialogBox();
					dialog.show();
					
					
				}                                                                                                                                                    
			});
	 
	        
	        
	        Join.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					 // TODO Auto-generated method stub
	                 
	                if( Email.getText().toString().equals("") ||
	                		Password.getText().toString().equals("")||
	                		Passwordcheck.getText().toString().equals("")||
	                		Name.getText().toString().equals("") ) { //이름이나 가격중에 하나라도 입력이 안돼있을때
	                    Toast.makeText(JoinActivity.this,
	                            "이름이나 가격을 입력하세요", Toast.LENGTH_SHORT).show();
	                    return;
	                }
	                     
	                    runOnUiThread(new Runnable() {
	                         
	                        public void run() {
	                            // TODO Auto-generated method stub
	                            String email = Email.getText().toString();
	                            String pwd= Password.getText().toString();
	                            String pwdcheck = Passwordcheck.getText().toString();
	                            String name = Name.getText().toString();
	                             
	                            try {
	                                URL url = new URL(SERVER_ADDRESS + "/insert.php?"
	                                        + "userid=" + URLEncoder.encode(email, "UTF-8")
	                                        + "&userpassword=" + URLEncoder.encode(pwd, "UTF-8")
	                                        + "&username=" + URLEncoder.encode(name, "UTF-8")); //변수값을 UTF-8로 인코딩하기 위해 URLEncoder를 이용하여 인코딩함
	                                url.openStream(); //서버의 DB에 입력하기 위해 웹서버의 insert.php파일에 입력된 이름과 가격을 넘김
	                                 
	                                String result = getXmlData("insertresult.xml", "result"); //입력 성공여부
	                                 
	                                if(result.equals("1")) { //result 태그값이 1일때 성공
	                                    Toast.makeText(JoinActivity.this,
	                                            "DB insert 성공", Toast.LENGTH_SHORT).show();
	                                     
	                                    Email.setText("");
	                                    Password.setText("");Name.setText("");
	                                }
	                                else //result 태그값이 1이 아닐때 실패
	                                    Toast.makeText(JoinActivity.this,
	                                            "DB insert 실패", Toast.LENGTH_SHORT).show();
	                            } catch(Exception e) {
	                                Log.e("Error", e.getMessage());
	                            }
	                        }

							
	                    });
					
				}
	        });
	        
	        setContentView(R.layout.activity_join);
	 }


	 
	 private String getXmlData(String filename, String str) { //태그값 하나를 받아오기위한 String형 함수
		        String rss = SERVER_ADDRESS + "/";
		        String ret = "";
		         
		        try { //XML 파싱을 위한 과정
		            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
		            factory.setNamespaceAware(true);
		            XmlPullParser xpp = factory.newPullParser();
		            URL server = new URL(rss + filename);
		            InputStream is = server.openStream();
		            xpp.setInput(is, "UTF-8");
		             
		            int eventType = xpp.getEventType();
		             
		            while(eventType != XmlPullParser.END_DOCUMENT) {
		                if(eventType == XmlPullParser.START_TAG) {
		                    if(xpp.getName().equals(str)) { //태그 이름이 str 인자값과 같은 경우
		                        ret = xpp.nextText();
		                    }
		                }
		                eventType = xpp.next();
		            }
		        } catch(Exception e) {
		            Log.e("Error", e.getMessage());
		        }
		         
		        return ret;
		    }


	 private AlertDialog createDialogBox(){
			AlertDialog.Builder builder = new AlertDialog.Builder(this);
			
			builder.setTitle("안내");
			builder.setMessage("취소하시겠습니까?");
			builder.setIcon(R.drawable.alert_dialog_icon);

			// 예 버튼 설정
			builder.setPositiveButton("아니오", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int whichButton) {
					
				}
			});

			// 취소 버튼 설정
			builder.setNeutralButton("예",new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int whichButton) {
					finish();
				}
			});
					// 빌더 객체의 create() 메소드 호출하면 대화상자 객체 생성
			AlertDialog dialog = builder.create();
			
			return dialog;
		}
		
}

말씀해 주신대로 소스를 고쳐봤는데,  또 NullPointerException 났습니다. 

로그캣을 보면 SetonClickListener부분에서 났다는데... 왜죠?

익명사용자 님이 2014년 7월 25일 답변
setContentView(R.layout.activity_join); 호출이 맨 마지막에 있군요...
이걸 먼저 해야 activity_join.xml에 선언된 View를 찾을 수 있는데.
나중에 해서  Cancel 버튼 객체를 찾지 못해 발생한 듯 합니다.

 setContentView(R.layout.activity_join); 를  호출하는 부분을    Email  =  (EditText)findViewById(R.id.editText1); 호출하기 전으로 올려 보세요.
...