[안드로이드]intent로 activity 이동 후 돌아왔을때 버튼 무반응

조회수 3183회
  1. A리스트뷰 목록 중 하나 클릭 하여 B리스트뷰로 이동
  2. B리스트뷰에서 글 작성 후 등록 버튼으로 등록 한 후 Back 버튼 눌러서 A리스트뷰로 다시 이동
  3. A리스트뷰목록 중 하나 클릭 -> B리스트뷰로 이동 후 글 작성(등록 버튼 반응 없음.)

글 등록 후 새로고침을 하고 싶어서 찾던 중 intent를 사용하려 하는데 intent로 이동후에 다시 돌아오면 DB에 접근해야 하는 등록 버튼이 먹통입니다. 이상하게 intent로 이동 후에 애뮬레이터에 있는 back 버튼으로 되돌아 왔을때에는 버튼이 작동합니다. intent로 이동할 때 현재 activity를 닫아도 봤지만 동일한 현상입니다. 도와주세요 ㅠㅠ

Back버튼이 있는 header 입니다.

    private void setHeader(){

        noticeID = getIntent().getIntExtra("noticeID",0);
        noticeTitle = getIntent().getStringExtra("noticeTitle");

        TextView titleText = (TextView) board1.findViewById(R.id.titleText);

        titleText.setText(noticeTitle);

       final Button backButton = (Button)board1.findViewById(R.id.backButton);
        backButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                try
                {
                   Intent intent = new Intent(NoticesBoard.this, Notice.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    NoticesBoard.this.startActivity(intent);
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        });

    }

글 등록 부분 입니다.

                Response.Listener<String> responseListener = new Response.Listener<String>() {

                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonResponse = new JSONObject(response);
                            boolean success = jsonResponse.getBoolean("success");
                            if (success) {
                                AlertDialog.Builder builder = new AlertDialog.Builder(NoticesBoard.this);
                                dialog = builder.setMessage("등록 되었습니다.")
                                        .setPositiveButton("확인", null)
                                        .create();
                                dialog.show();
                            } else {
                                AlertDialog.Builder builder = new AlertDialog.Builder(NoticesBoard.this);
                                dialog = builder.setMessage("등록에 실패했습니다.")
                                        .setNegativeButton("확인", null)
                                        .create();
                                dialog.show();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                };
                ReplyRequest addRequest = new ReplyRequest(noticeID + "","", userID, replyContent, responseListener);
                RequestQueue queue = Volley.newRequestQueue(NoticesBoard.this);
                queue.add(addRequest);
            }
        });
    }

데이터베이스 부분입니다.


    class BackgroundTask extends AsyncTask<Void, Void, String>
    {
        String target;

        @Override
        protected void onPreExecute()   {
            target = "http://cafe24.com/php";
        }

        @Override
        protected String doInBackground(Void...voids)   {
            try {
                URL url = new URL(target);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                InputStream inputStream = httpURLConnection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String temp;
                StringBuilder stringBuilder = new StringBuilder();
                while((temp = bufferedReader.readLine()) !=null)
                {
                    stringBuilder.append(temp + "\n");
                }
                bufferedReader.close();
                inputStream.close();
                httpURLConnection.disconnect();
                return stringBuilder.toString().trim();
            }   catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        public void onProgressUpdate(Void...values) {
            super.onProgressUpdate();
        }

        @Override
        public void onPostExecute(String result)    {
            try {
                JSONObject jsonObject = new JSONObject(result);
                JSONArray jsonArray = jsonObject.getJSONArray("response");
                int count = 0;
                int replyID, noticeID, rreplyID;
                String replyContent, replyName, replyDate;
                while(count < jsonArray.length())
                {
                    JSONObject object = jsonArray.getJSONObject(count);
                    replyID = object.getInt("replyID");
                    noticeID = object.getInt("noticeID");
                    rreplyID = object.getInt("rreplyID");
                    replyContent = object.getString("replyContent");
                    replyName = object.getString("replyName");
                    replyDate = object.getString("replyDate");
                    N_Reply reply = new N_Reply (replyID, noticeID, rreplyID, replyContent, replyName, replyDate);
                    replyList.add(reply);
                    count++;
                }
            }   catch   (Exception e)   {
                e.printStackTrace();
            }
        }
    }
}

로그입니다.

04-25 10:44:52.923 11709-12200/com.example.uet.nsu E/Volley: [224] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
                                                             java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
                                                                 at libcore.net.UriCodec.encode(UriCodec.java:132)
                                                                 at java.net.URLEncoder.encode(URLEncoder.java:57)
                                                                 at                 com.android.volley.Request.encodeParameters(Request.java:450)
                                                                 at com.android.volley.Request.getBody(Request.java:436)
                                                                 at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:260)
                                                                 at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:234)
                                                                 at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:107)
                                                                 at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96)
                                                                 at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)

읽어주셔서 감사합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 문제가 매번 동일한 스텝으로 발생한다면 직접 로그를 살펴보면서 디버깅을 하는게 가장 빠른 방법입니다. 로그 상으로는 현재 스트링 객체를 넘겨주는 곳에서 값이 존재하지 않고 null인 상태이기 때문에 NullPointerException이 발생하게 됐고, 앱이 오동작하는 것인데요.

    콜 스택 중(로그 중) 직접 구현한 코드의 라인이 출력됐다면 그 부분의 코드를 우선 살펴보시고요. 혹시 존재하지 않는다면 디버깅 모드로 의심이 가는 부분을 한 라인씩 수행해보시기 바랍니다. 혹은 로그를 추가하는 것도 좋은 방법입니다. 아무튼 직접 작성한 코드 중 어디가 문제인지를 발견해내야 하는데 올려주신 정보로는 찾기가 쉽지 않습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 감사합니다. 의심이 되는 곳에만 로그를 표시 해서 확인하다가 안 되서 올린건데 말씀해 주신것을 참고해서 모든 곳에 로그를 표시한 결과 다른 곳에서 null이 발생하는 것을 확인했습니다. 고견 감사합니다.!!!! 알 수 없는 사용자 2017.4.27 11:11

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)