2011-09-07 2 views
1

이 문제는 Android 에뮬레이터의 로그인 버튼을 클릭하면 사용자 이름 텍스트 상자에 나타납니다. 인덱스 0 체계에 불법 문자 :java.lang.IllegalArgumentException : 인덱스 0의 스키마에서 잘못된 문자가 있습니다. AND android.os.NetworkOnMainThreadException

친절하게 ~ 당신의 도움이 감사는 ... 내가 그것을 해결하기 위해

java.lang.IllegalArgumentException가 도움이

android.os.NetworkOnMainThreadException

- - 업데이트 2011년 9월 7일

나는 여기에 내 코드를 게시 :

,703,210 -> Login.java

http://pastebin.com/WgGctGHN -> CustomHttpClient.java

+0

관련 코드와 전체 스택 추적을 제공해 주시겠습니까? – Julian

+0

줄리안, 자바 코드를 의미합니까? – RYS

+0

예. 그렇지 않으면 우리는 당신이하려는 일을 짐작할 수 있습니다. – Julian

답변

1

그래서 먼저 안드로이드 물건 : 당신이 당신의 주 응용 프로그램 스레드에서 HTTP 요청을 만들려고 노력하고 있기 때문에이 NetworkOnMainThreadException을 얻고있는 UI 스레드입니다. 이 스레드에서는 차단 작업을해서는 안됩니다. 대신 AsyncTask을 사용하십시오.

은 내가 IllegalArgumentException의 원인이 무엇 확실치 않지만 나는이 선 것 같아요 :

response = CustomHttpClient.executeHttpPost("http://127.0.0.1/es/check.php", postParameters); 

당신은 아마 (로컬 호스트 일반적으로 휴대 전화에서 이해가되지 않습니다) URL을 변경했습니다. 구성 부분은 http입니다. 어쩌면 원래 코드에서 " http://..."과 같은 것이 있습니다 (공백 문자에주의하십시오)? 는 PHP에

짧은 참고 :

당신이 SQL injection 부르는
$sql = 'SELECT * from people WHERE username = "' .$_POST['un'] . '" and password = "' .md5($_POST['pw']) . '"'; 

.

업데이트 : 다음은 몇 가지 예입니다. 그것을 테스트하지 않았 으면 좋겠다.

public class LoginLayout extends Activity { 

    EditText un,pw; 
    TextView error; 
    Button ok; 

    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     un=(EditText)findViewById(R.id.et_un); 
     pw=(EditText)findViewById(R.id.et_pw); 
     ok=(Button)findViewById(R.id.btn_login); 
     error=(TextView)findViewById(R.id.tv_error); 

     ok.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       new LoginTask().execute(un.getText().toString(), pw.getText().toString()); 
      } 

     }); 
    } 

    private class LoginTask extends AsyncTask<String, Void, Object> { 

     protected Object doInBackground(String... params) { 
      ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
      postParameters.add(new BasicNameValuePair("username", params[0])); 
      postParameters.add(new BasicNameValuePair("password", params[1])); 

      String response = null; 

      try { 
       response = CustomHttpClient.executeHttpPost("http://127.0.0.1/es/check.php", postParameters); 
       String res = response.toString(); 
       res = res.replaceAll("\\s+",""); 
       return res; 
      } catch (Exception e) { 
       return e; 
      } 
     } 

     protected void onPostExecute(Object result) { 
      if (result instanceof String) { 
       if (result.equals("1")) { 
        error.setText("Correct Username or Password"); 
       } else { 
        error.setText("Sorry!! Wrong Username or Password Entered"); 
       } 
      } else if (result instanceof Exception) { 
       un.setText(result.toString()); 
      } 
     } 
    } 

} 
+0

몇 가지 코드를 추가했습니다. 다행히도 작동합니다;) – Julian

+0

감사합니다 줄리안 ... 나는 마지막 단락에서 그 gt 오류를 이미 시도했지만 : else if (result instanceof Exception) { un.setText (e.toString()); }에서 (e.toString()); – RYS

+0

아 맞아, result.toString()이되어야합니다. – Julian

관련 문제