java.lang.IllegalArgumentException: недопустимый символ в схеме с индексом 0: AND android.os.NetworkOnMainThreadException - PullRequest
1 голос
/ 07 сентября 2011

Эта проблема возникает, когда я нажимаю кнопку «Вход» в эмуляторе Android, она появляется в текстовом поле «Имя пользователя».

Пожалуйста, помогите мне решить ее ... ваша помощь ценится ~

java.lang.IllegalArgumentException: недопустимый символ в схеме с индексом 0:

android.os.NetworkOnMainThreadException

- Обновление 7.9.2011

Я отправляю свой код здесь:

http://pastebin.com/EX0ArwaE -> Login.java

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

1 Ответ

1 голос
/ 07 сентября 2011

Итак, сначала для Android: вы получаете это NetworkOnMainThreadException, потому что вы пытаетесь сделать HTTP-запрос в основном потоке приложения, который является потоком пользовательского интерфейса. Вы не должны делать никаких блокирующих операций в этой теме. Вместо этого используйте AsyncTask .

Я не совсем уверен, что вызывает IllegalArgumentException, но я думаю, что это строка:

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

Вы, вероятно, изменили URL (localhost обычно не имеет смысла на телефоне). Часть схемы это http. Может быть, у вас есть что-то вроде " http://..." (обратите внимание на начальный пробел) в исходном коде?

Краткое примечание по PHP:

$sql = 'SELECT * from people WHERE username = "' .$_POST['un'] . '" and password = "' .md5($_POST['pw']) . '"';

Это то, что вы называете SQL-инъекцией .

Обновление: Вот несколько примеров. Не проверял, надеюсь, это работает.

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());
            }
        }
    }

}
...