2016-05-22 2 views
0

Я сделал веб-сайт, используя мой localhost, и у него есть некоторые значения и кнопка. Если у кого-то доступ к URL-адресу (например, http://myhost/?status2=0), значение изменяется.Android HttpUrlConnection не работает

Я хочу, чтобы это действие в Android, поэтому я использовал HttpURLConnection, но он не работает.

Если у меня есть доступ к URL-адресу с помощью Intent (ACTION_VIEW, Uri.parse("http...")) в Android, он работает хорошо.

Но я получаю доступ к URL-адресу с помощью HttpURLConnection, он не работает. Я не знаю, что не так. Пожалуйста, помогите мне.

Это код в приложении для Android. Я уже проверил манифесты.

try{ 
    URL url = new URL("http://myhost/?status2=0"); 

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setUseCaches(false); 
    conn.setRequestMethod("POST"); 
    conn.setDoInput(true); 
    conn.setDoOutput(true); 

} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

Я не уверен, но я думаю, что если вы хотите использовать «HttpURLConnection», ваш URL должен содержать «www». попробуйте и проверьте, работает ли это? – pooyan

+0

Вы можете использовать стороннюю библиотеку OkHttp. Это предпочтительнее многих из HttpURLConnection. – Vucko

ответ

0

Ok вы можете использовать Retrofit или OkHttp но HttpUrlConnection попробовать так:

public void refreshToken(String url,String refresh,String cid,String csecret) throws IOException { 
     URL refreshUrl = new URL(url + "token"); 
     HttpURLConnection urlConnection = (HttpURLConnection) refreshUrl.openConnection(); 
     urlConnection.setDoInput(true); 
     urlConnection.setRequestMethod("POST"); 
     urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     urlConnection.setUseCaches(false); 
     String urlParameters = "grant_type=refresh_token&client_id=" + cid + "&client_secret=" + csecret + "&refresh_token=" + refresh; 
     // Send post request 
     urlConnection.setDoOutput(true); 
     DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream()); 
     wr.writeBytes(urlParameters); 
     wr.flush(); 
     wr.close(); 
     int responseCode = urlConnection.getResponseCode(); 
     //this is my Pojo class . I am converting response to Pojo with Gson 
     RefreshTokenResult refreshTokenResult = new RefreshTokenResult(); 
     if (responseCode == 200) { 

      BufferedReader in = new BufferedReader(
        new InputStreamReader(urlConnection.getInputStream())); 
      String inputLine; 
      StringBuffer response = new StringBuffer(); 

      while ((inputLine = in.readLine()) != null) { 
       response.append(inputLine); 
      } 
      in.close(); 
      // JSONObject obj=new JSONObject(response.toString()); 
      Gson gson = new Gson(); 
      refreshTokenResult = gson.fromJson(response.toString(), RefreshTokenResult.class); 
      //handle new token ... 
      mLoginPrefsEditor = mLoginPreferences.edit(); 
      mLoginPrefsEditor.commit(); 
      mLoginPrefsEditor.putString(mContext.getResources().getString(R.string.pref_accesstoken), "Bearer " + refreshTokenResult.getAccessToken()); 
      mLoginPrefsEditor.putString(mContext.getResources().getString(R.string.pref_refreshtoken), refreshTokenResult.getRefreshToken()); 
      mLoginPrefsEditor.commit(); 
     } 
} 

В моих других запросов я использую OkHttp при поддержке Retrofit, но в токен обновления - обновление маркера является критическим процессом для меня - я использую HttpUrlConnection.

Когда я использую OkHttp или Retrofit в обновлении метода токена, иногда он не будет исправляться.

И я получил это: иногда вам нужно использовать базовый метод рукопожатия с HttpUrlConnection.

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