2015-04-09 2 views
0

Я пытаюсь сделать сообщение http на своем сервере, чтобы проверить, действительны ли учетные данные для входа с помощью this. Мне нужно сделать запрос на мой сервер, но я должен добавить авторизацию, я получаю строку с функцией getB64Auth от this answer. функция записывает правильную переменную (так же, как я использую с почтальоном). Но по какой-то причине моя программа перестает работать, если я запускаю свой код. Я уже пытался добавить код из комментариев, но это не помогло.Объявление о регистрации на Android

Что я делаю неправильно?

private String getB64Auth (String login, String pass) { 
    String source=login+":"+pass; 
    String ret="Basic "+Base64.encodeToString(source.getBytes(),Base64.URL_SAFE| Base64.NO_WRAP); 
    Log.d("authy", ret); 
    return ret; 
} 


/** Called when the user clicks the Login button */ 
public void login(View view) { 

    // Getting username and password 
    EditText userText = (EditText) findViewById(R.id.inputLoginUsername); 
    EditText passText = (EditText) findViewById(R.id.inputLoginPassword); 
    String usernameInput = userText.getText().toString(); 
    String passwordInput = passText.getText().toString(); 

    String authorizationString = getB64Auth(usernameInput,passwordInput); 

    // Do something in response to button 
    // 1. Create an object of HttpClient 
    HttpClient httpClient = new DefaultHttpClient(); 
    // 2. Create an object of HttpPost 

    // I have my real server name down here 
    HttpPost httpPost = new HttpPost("https://myservername.com/login"); 
    // 3. Add POST parameters 

    httpPost.setHeader("Authorization", authorizationString); 






    // 5. Finally making an HTTP POST request 

    try { 
     HttpResponse response = httpClient.execute(httpPost); 
     Log.d("win", "win1"); 
     // write response to log 
     Log.d("Http Post Response:", response.toString()); 
    } catch (ClientProtocolException e) { 
     Log.d("fail", "Fail 3"); 
     // Log exception 
     e.printStackTrace(); 
    } catch (IOException e) { 
     Log.d("fail", "Fail 4"); 
     // Log exception 
     e.printStackTrace(); 
    } 
}  

Когда я запускаю мой код, приложение перестает работать, я могу найти authy журнала, но я не могу найти какой-либо сбой SucceS журналов. То, что я изменил в примере, это шаг 3.

ive добавила мою авторизацию там.

и удален шаг 4, потому что я не нуждаюсь в нем.

Рабочий пример почтальона, с тем же запросом, который я хочу сделать в android.

enter image description here Вы можете видеть, что я получаю ответ, и только набор Авторизация по моей просьбе.

Я не могу найти подходящие учебники по пост/авторизации, поэтому я надеюсь, что я смотрю в правильном направлении.

Это андроид 4. * Проект

+0

Что вы подразумеваете под "app stops working" - это просто застряло или полностью рушится? Вы пытались нюхать трафик Http с Чарльзом/Скрипачом? –

+0

@SamuilYanovski Приложение закрывается, и приложение app отключено. –

+1

Вы видите что-то подозрительное в LogCat (т. Е. Какие-либо ошибки)? Маленький фиктивный вопрос - вы включили разрешение на Интернет, не так ли? :) –

ответ

2

всего несколько предложений о таких вопросах:

  • Проверьте права доступа (Интернет, который вы должны были бы)
  • приложения, как Charles/Fiddler позволяют вам обнюхайте трафик Http с устройства, чтобы вы могли расследовать то, что отправляется
  • Если приложение сбой - проверьте сообщения LogCat (например, оно может содержать сообщение, объясняющее w Хич разрешение отсутствует)

Что касается этого сообщения:

Приложение может делать слишком много работы на своем главном потоке.

Это обычно означает, что вы выполняете тяжелые операции в основном потоке - например, разбираете Json из ответа Http Как правило, вы хотите выполнять все эти операции в фоновом потоке и использовать основной, чтобы обновлять только пользовательский интерфейс.

Смежные вопросы