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

openStream에서 nullPointerException이 발생합니다

0 추천
public class MainActivity extends ActionBarActivity {
	private final String SERVER_ADDRESS = "http://10.185.14.120/sagopalgo"; //서버 주소(php파일이 저장되어있는 경로까지)
    
    EditText edtname;
    Button btnbuy19;
    Button btnsell19;
    Button btnbuy20;
    Button btnsell20;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        edtname = (EditText )findViewById(R.id.editText1);
        btnbuy19 = (Button )findViewById(R.id.btn1);
        btnsell19 = (Button )findViewById(R.id.btn2);
        btnbuy20 = (Button )findViewById(R.id.btn3);
        btnsell20 = (Button )findViewById(R.id.btn4);
        
        btnsell19.setOnClickListener(new View.OnClickListener() { //입력 버튼을 눌렀을 때1
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 
                if( edtname.getText().toString().equals("") ) { //이름이 입력 안돼있을때
                    Toast.makeText(MainActivity.this,
                            "이름을 입력하세요", Toast.LENGTH_SHORT).show();
                    return;
                }
                     
                    runOnUiThread(new Runnable() {
                         
                        public void run() {
                            // TODO Auto-generated method stub
                            String name = edtname.getText().toString();
							String phone = getPhoneNumber();
                             
                            try {
                                URL url = new URL(SERVER_ADDRESS + "/insert.php?" //테이블에 따라 php파일 다름
                                        + "name=" + URLEncoder.encode(name, "UTF-8")
                                        + "&phone=" + URLEncoder.encode(phone, "UTF-8")); //변수값을 UTF-8로 인코딩하기 위해 URLEncoder를 이용하여 인코딩함
                                url.openStream(); //서버의 DB에 입력하기 위해 웹서버의 insert.php파일에 입력된 이름과 번호를 넘김
                                 
                                String result = getXmlData("insertseller.xml", "result"); //입력 성공여부
                                if(result.equals("1")) { //result 태그값이 1일때 성공
                                    Toast.makeText(MainActivity.this,
                                            "DB insert 성공", Toast.LENGTH_SHORT).show();
                                     
                                    edtname.setText("");
                                }
                                else //result 태그값이 1이 아닐때 실패
                                    Toast.makeText(MainActivity.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;
    }
    
    public String getPhoneNumber()	//핸드폰번호 얻기
	{
	 TelephonyManager mgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
	 return mgr.getLine1Number();
	}
}

맨땅에 헤딩으로 앱하나 개발해보기 하고있습니다. 시간이 촉박해서..

setOnClickListner 안의 url.openStream 부분에서 에러가 발생합니다.

저 한줄만 지우면 에러가나면서 꺼지지는 않습니다.(물론 동작은 안되지만)

이틀밤째 찾아보고 있는데 왜 그런지 도통 알수가 없습니다.. 도움 부탁드립니다

 

11-18 16:20:02.694: E/AndroidRuntime(700): FATAL EXCEPTION: main
11-18 16:20:02.694: E/AndroidRuntime(700): java.lang.NullPointerException: println needs a message
11-18 16:20:02.694: E/AndroidRuntime(700): 	at android.util.Log.println_native(Native Method)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at android.util.Log.e(Log.java:231)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at com.example.buyandsell.MainActivity$1$1.run(MainActivity.java:77)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at android.app.Activity.runOnUiThread(Activity.java:4591)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at com.example.buyandsell.MainActivity$1.onClick(MainActivity.java:53)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at android.view.View.performClick(View.java:4084)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at android.view.View$PerformClick.run(View.java:16966)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at android.os.Handler.handleCallback(Handler.java:615)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at android.os.Handler.dispatchMessage(Handler.java:92)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at android.os.Looper.loop(Looper.java:137)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at android.app.ActivityThread.main(ActivityThread.java:4745)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at java.lang.reflect.Method.invokeNative(Native Method)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at java.lang.reflect.Method.invoke(Method.java:511)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-18 16:20:02.694: E/AndroidRuntime(700): 	at dalvik.system.NativeStart.main(Native Method)

 

jjhh04 님이 2015년 11월 19일 질문
2015년 11월 19일 수정

2개의 답변

0 추천
NullPointerException 오류라면 url이 null 값으로 들어갔다는 것이므로 URL 선언 시 올바르게 된 것인지 확인해 보시기 바랍니다.

 

http://biig.tistory.com/37
Autopro (1,780 포인트) 님이 2015년 11월 19일 답변
0 추천
1. network 는 별도의 스레드에서 동작해야 합니다. 현재는 메인 스레드에 있네요?

2. 서버 경로를 작업 URL 클래스에 넣지 말고 스트링에 넣은 뒤 해당 url 을 먼저 출력하고 그 뒤에 넣어보세요 그러면 무엇이 잘못되었는지 파악하기 쉬울 겁니다.
aucd29 (218,390 포인트) 님이 2015년 11월 19일 답변
...