코드는 댓글이 아닌 http://www.masterqna.com/android/1 이 글처럼 본문에 넣으세요. 앞으로도 프로그래머를 할 거라면 또 다시 질문을 해야하는 순간이 오는데, 그 때도 지금처럼 코드가 한 눈에 안 들어오면 그 만큼 답변이 늦게 달립니다.
https://susemi99.gitbooks.io/howto-for-beginners/content/
먼저 에러 로그부터 살펴보죠.
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
.
.
.
at com.example.park.smart_shopper2.MainActivity.showList(MainActivity.java:52)
.
.
NullPointerException 은 아직 선언되지 않았거나, null 인 변수에서 무언가를 꺼내올 때 발생합니다. 친절하게 MainActivity.java의 52번째 줄에서 발생했다고 하네요. null 인 String의 길이를 구하려다보니 발생했다고 하네요.
그럼 MainActivity의 52번째 줄이 어디인지 보면 되겠죠? 올려주신 코드에는 안 나와있지만 아마도
JSONObject jsonObj = new JSONObject(myJSON);
이 구문일 가능성이 제일 높습니다.
왜냐면 try-catch 에서는 JSONException 만 잡고 NullPointerException 은 처리를 안하기 때문이죠.
그렇다면 52번의 어느 부분이 문제일까요?
jsonObj는 이제 생성하는 것이니 문제가 될 만한건 myJSON 밖에 없습니다.
그럼 어디에서 myJSON에 값을 넣어줄까요?
protected void onPostExecute(String result){
myJSON=result;
showList();
}
여기 밖에 없네요.
그럼 어떻게 해야할까요?
이럴 때 쓰라고 있는 게 Log 입니다.
protected void onPostExecute(String result){
Log.i("###", "|" + result);
myJSON=result;
showList();
}
이렇게 바꾸면 result 가 null 이라서 myJSON도 null 인지를 확인해보면 됩니다.
만약 저기서 null이면 어떻게 해야할까요?
그럴 땐 저 result가 어디서 넘어오는지를 확인해보고, 거기에서 log를 찍어보는 식으로 계속 한 단계씩 뒤로 가면서 찍어보면 됩니다.
앱에서는 더 이상 찍어볼 곳이 없다? 그럼 php에서 문제가 발생했겠죠. 그럼 php로 가서 찍어보면 되는 겁니다.
가장 기초적인 디버깅 방식입니다.
도무지 찾을 수 없다고 했지만, 다른 사람이 보기에는 눈으로만 대충 훑은 걸로 밖에 안 보입니다. 대충 훑는 방식은 고수나 천재들에게 어울리는 방식입니다.