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

두가지 에러 코드 해결방법좀 알려주세요..고수분들..

0 추천
DB와 연동하여 회원가입하는 앱 만들고 있는 중인데.. 회원가입 창으로 넘어갈때.. 저런에러들이 뜹니다..ㅠ

도와주세요...

첫번째 에러 handleWindowVisibility: no activity for token android.os.BinderProxy@e32d4c8

두번째 에러 JVMTI error: 15(JVMTI_ERROR_THREAD_NOT_ALIVE)  

이런 에러가 뜨는데 코드 부분 원하시면 댓글로 달아드리겠습니다.ㅠㅠㅠ

전반적으로 어떤 에러인지 구글링해도 잘 안나와서요...
꿀개 (2,440 포인트) 님이 2018년 12월 3일 질문

1개의 답변

0 추천
 
채택된 답변
회원을 확인하기 위해 서버에 데이터 전송을 thread로 하시는것 같은데 작업종료전에 다른 activity로 이동하여 이전 activity에서 수행하던작업에서 오류가 나온겁니다. thread를 종료후 이동해 보세요 . 만약 아니시라면 관련소스를 올려주시는것이 좋을듯 합니다.
산적 (1,360 포인트) 님이 2018년 12월 4일 답변
꿀개님이 2018년 12월 5일 채택됨
public class LoginActivity extends AppCompatActivity {
    EditText idText, passwordText;
    Button loginButton;
    TextView registerBtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_main);
        final EditText idText =(EditText)findViewById(R.id.idText);
        final EditText passwordText =(EditText)findViewById(R.id.pswordText);
        final TextView registerBtn =(TextView)findViewById(R.id.registerBtn);
        final Button loginButton=(Button)findViewById(R.id.loginButton);
        registerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent =new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(intent);
            }
        });
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String userID=idText.getText().toString();
                final String userPassword=passwordText.getText().toString();
                Response.Listener<String> responseListenser =new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try{
                            JSONObject jsoneRessponse=new JSONObject(response);
                            boolean succcess=jsoneRessponse.getBoolean("success");
                            if(succcess){
                                String userID= jsoneRessponse.getString("userID");
                                String userPassword=jsoneRessponse.getString("userPassword");
                                Intent intent=new Intent(LoginActivity.this, MainActivity.class);
                                intent.putExtra("userID", userID);
                                intent.putExtra("userPassword", userPassword);
                                LoginActivity.this.startActivity(intent);
                            }
                            else{
                                AlertDialog.Builder builder=new AlertDialog.Builder(LoginActivity.this);
                                builder.setMessage("로그인에 실패하였습니다.")
                                .setNegativeButton("다시 시도", null)
                                .create()
                                .show();
                            }
                        }catch(Exception e){
                        }
                    }
                };
                LoginRequest loginRequest= new LoginRequest(userID, userPassword, responseListenser);
                RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
                queue.add(loginRequest);
            }
        });

    }
질문에 보면  "회원가입 창으로 넘어갈때.. 저런에러들이 뜹니다" 라고하셨는데 앱실행후 registerBtn 만 클릭하신경우인가요 아니면 다른 다른 동작이 있는건가요.
이 코드부분이 메인부분인데 여기서 회원가입 버튼 누를시 저런 에러가 발생합니다. 위쪽에는 회원가입창의 액티비티구요..


import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
//로그인 성공시
public class MainActivity extends AppCompatActivity {
    TextView idText, pswordText, welcome;
    Button manageMentButton;
    String userID, userPassword,message;
    ArrayList<MemberDTO> members ;
    StringBuffer stringBuffer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        idText =(TextView)findViewById(R.id.idText);
        pswordText =(TextView)findViewById(R.id.pswordText);
        welcome=(TextView)findViewById(R.id.welcome);
        manageMentButton=(Button)findViewById(R.id.manageMentButton);
        manageMentButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new BackgroundTask().execute();
            }
        });
        Intent intent=getIntent();
        userID=intent.getStringExtra("userID");
        userPassword=intent.getStringExtra("userPassword");
        message ="환영 합니다. " + userID + "님!";
        idText.setText(userID);
        pswordText.setText(userPassword);
        welcome.setText(message);

        if(!userID.equals("admin")){
            manageMentButton.setVisibility(View.GONE);
        }

    }
    class BackgroundTask extends AsyncTask<Void, Void,  String>{
        String target;
        @Override
        protected void onPreExecute() {
            target="http://ip/List.php";
        }
        @Override
        protected String doInBackground(Void... voids) {
            InputStream is=null;
            InputStreamReader isr =null;
            BufferedReader reader=null;
            stringBuffer =new StringBuffer();
            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();
                /*httpURLConnection.setConnectTimeout(10000);
                if(httpURLConnection.getResponseCode()==HttpURLConnection.HTTP_OK){
                    is=httpURLConnection.getInputStream();
                    reader=new BufferedReader(new InputStreamReader(is));
                    while(true){
                        String stringLine =reader.readLine();
                        if(stringLine==null)break;
                        stringBuffer.append(stringLine+"\n");
                    }
                }*/
                //parsing(stringBuffer.toString());
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                try {
                    if(reader!=null) reader.close();
                    if(isr!=null) isr.close();
                    if(is!=null)is.close();

                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            return null;
        }
        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }
        @Override
        protected void onPostExecute(String s) {
            Intent intent =new Intent(MainActivity.this, ManagementActivity.class);
            intent.putExtra("userList", stringBuffer.toString());
            intent.putExtra("saveList", stringBuffer.toString());
            startActivity(intent);
        }
    }
    public void parsing(String data){
        members=new ArrayList<>();
        try{
            JSONObject jsonObject =new JSONObject(data);
            JSONArray jsonArray=new JSONArray(jsonObject.getString("response"));
            members.clear();
            for(int i=0; i<jsonArray.length(); i++){
                MemberDTO member=new MemberDTO();
                JSONObject jsonObject1=(JSONObject)jsonArray.get(i);
                member.setUserID(jsonObject1.getString("userID"));
                member.setUserName(jsonObject1.getString("userName"));
                member.setUserPassword(jsonObject1.getString("userPassword"));
                //member.setUserAge(jsonObject1.getInt("userAge"));
                member.setUserAge(jsonObject1.getString("userAge"));
                if(!member.getUserID().equals("admin")) {
                    members.add(member);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
activity 에서 선언한 stringBuffer  asynctask 에서 new를 하는것이 맞는지 확인햅보세요 .그리고 소스를 잘못 올려주신 것 아닌가 싶습니다. 회원가입을 하는게 아니라. 관리자회원 화면으로 넘어가는 것으로 보입니다. 그리고 onPostExecute 에서 값을 넣지도 않은 stringBuffer 를  넘기는 이슈가 좀 이상하고 확인해 보셔야할듯합니다.
아아 죄송합니다 잘못보내드렸습니다
처음에 댓글드린것이 로그인할때 화면에서의 액티비티이며
이번 답글이 회원가입 창에대한 액티비티입니다.
로그인화면에서 회원가입 버튼을 누르면
E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@166892c
라는 에러가 표시되고있습니다.

package com.example.swj.mysql;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.InputFilter;
import android.text.Spanned;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.regex.Pattern;
public class RegisterActivity extends AppCompatActivity {
    EditText idText, pswordText, nameText, ageText;
    Button registerButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        final EditText idText =(EditText)findViewById(R.id.idText);
        final EditText pswordText =(EditText)findViewById(R.id.pswordText);
        final EditText nameText =(EditText)findViewById(R.id.nameText);
        final EditText ageText =(EditText)findViewById(R.id.ageText);
        idText.setFilters(new InputFilter[] {filter});
        registerButton = (Button)findViewById(R.id.registerbutton);
        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String userID = idText.getText().toString();
                String userPassword = pswordText.getText().toString();
                String userName = nameText.getText().toString();
                //int userAge = Integer.parseInt(ageText.getText().toString()); //익셉션 발생, Aga를 int형말고 String형으로 변환해보자.
                String userAge = ageText.getText().toString();
                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(RegisterActivity.this);
                                builder.setMessage("회원 등록에 성공했습니다.")
                                        .setPositiveButton("확인", null).create()
                                        .show();
                                Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
                                startActivity(intent);
                            } else {
                                AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                                builder.setMessage("회원 등록에 실패했습니다.")
                                        .setNegativeButton("다시 시도", null).create()
                                        .show();
                                Intent intent = new Intent(RegisterActivity.this, RegisterActivity.class);
                                startActivity(intent);
                            }
                        }


                        catch (JSONException e){
                            e.printStackTrace();
                        }
                    }
                };
                RegisterRequest registerRequest=new RegisterRequest(userID, userPassword,
                        userName,userAge, responseListener);
                RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
                queue.add(registerRequest);

            }
        });
    }
    protected InputFilter filter= new InputFilter() {
        public CharSequence filter(CharSequence source, int start, int end,
                                   Spanned dest, int dstart, int dend) {
            Pattern ps = Pattern.compile("^[a-zA-Z0-9]+$");
            if (!ps.matcher(source).matches()) {
                return "";
            }
            return null;
        }
    };
    public InputFilter filterKor = new InputFilter() {

        @Override
        public CharSequence filter(CharSequence source, int start, int end,

                                   Spanned dest, int dstart, int dend) {
            Pattern ps = Pattern.compile("^[ㄱ-가-힣]+$");
            if (!ps.matcher(source).matches()) {
                return "";
            }
            return null;
        }

    };
}
...