2016-03-08 4 views
0

Я знаю, что HttpClient отменен и их много вопросов об альтернативе. Я видел эти вопросы и даже читал документацию для HttpURLConnection. Для любви я не могу заставить мой код работать с HttpUrlConnection. Есть ли какие-либо предложения. Вот код.Как изменить этот код, чтобы использовать HttpURLConnection вместо httpClient

@Override 
     protected Void doInBackground(Void... params) { 
      ContentValues dataToSend =new ContentValues(); 
      dataToSend.put("name", user.name); 
      dataToSend.put("uersname", user.username); 
      dataToSend.put("password", user.password); 
      dataToSend.put("age", user.age + ""); 

     // URL myUrl = new URL("http://192.168.182.15/connection.php"); 
    // HttpURLConnection conn = (HttpURLConnection) myUrl.openConnection(); 

     HttpParams httpRequestParams = getHttpRequestParams(); 

     HttpClient client = new DefaultHttpClient(httpRequestParams); 
     HttpPost post = new HttpPost(SERVER_ADDRESS 
       + "Register.php"); 

     try { 
      post.setEntity(new UrlEncodedFormEntity(dataToSend)); 
      client.execute(post); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    private HttpParams getHttpRequestParams() { 
     HttpParams httpRequestParams = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpRequestParams, 
       CONNECTION_TIMEOUT); 
     HttpConnectionParams.setSoTimeout(httpRequestParams, 
       CONNECTION_TIMEOUT); 
     return httpRequestParams; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     progressDialog.dismiss(); 
     userCallBack.done(null); 
    } 
+0

Это действительно не ответ на ваш вопрос, поэтому я выложу это как комментарий. Мое предложение: не используйте это! Используйте модификацию + rxandroid. Лучше привыкнуть к соответствующей библиотеке. Проверьте это http://blog.stablekernel.com/replace-asynctask-asynctaskloader-rx-observable-rxjava-android-patterns/ – hehe

+0

Вы принимаете JSONParser.java ?? –

+0

взгляните на сетевую библиотеку, такую ​​как Volley или Retrofit, она будет намного проще, чем она. Кроме того, HttpClient и HttpUrlConnection больше не будут обновляться. Поэтому Мое предложение не использует их. –

ответ

0

Этот класс JSONParser является простым в использовании.

JSONParser.java

public class JSONParser { 

    public JSONParser() { 

    } 

    public String makeBufferCall(String serviceUrl) { 
     Boolean registered = false; 
     StringBuffer response = new StringBuffer(); 
     URL url = null; 

     HttpURLConnection conn = null; 
     try { 

      url = new URL(serviceUrl); 
      conn = (HttpURLConnection) url.openConnection(); 
      conn.setConnectTimeout(30000); 
      conn.setDoOutput(false); 
      conn.setUseCaches(false); 
      conn.setRequestMethod("GET"); 
      conn.setRequestProperty("Content-Type", 
        "application/x-www-form-urlencoded;charset=UTF-8"); 
      int status = conn.getResponseCode(); 
      if (status != 200) { 
       throw new IOException("Post failed with error code " + status); 
      } 
      registered = true; 

      // Get Response 
      InputStream is = conn.getInputStream(); 
      BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
      String line; 

      while ((line = rd.readLine()) != null) { 
       response.append(line); 

      } 
      rd.close(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      //ErrorLogger.writeLog(claimNo, "Error Msg : "+e.getMessage()+"..."+ErrorLogger.StackTraceToString(e), "sendSyncService Failed"); 
      //response.append("Error"); 
     } 
     Log.v("Response:", response.toString()); 
     return response.toString(); 

    } 


} 

И использовать этот класс в AsyncTask, используя только вызов метода. Поэтому не нужно писать весь код каждый раз.

@Override 
     protected Void doInBackground(Void... params) { 
      // Locate the Offer_POJO Class 
      property_data = new ArrayList<Contract_POJO>(); 
      // Create an array to populate the spinner 
      property = new ArrayList<String>(); 

      JSONParser call = new JSONParser(); 
      jsonstr = call.makeBufferCall(url_property); 
      Log.d("Response: ", "> " + jsonstr); 

      return null; 
     } 
+0

Этот код работает с регистрационным файлом php. Поэтому JSON не то, что я ищу. Я ищу, чтобы сохранить целостность кода, который я опубликовал, насколько это возможно при использовании HttpURLConnection. –

0

Я не запустить этот код, но я думаю, что это будет хорошо работать ..

@Override 
    protected Void doInBackground(Void... params) { 

     ContentValues dataToSend =new ContentValues(); 
     dataToSend.put("name", user.name); 
     dataToSend.put("uersname", user.username); 
     dataToSend.put("password", user.password); 
     dataToSend.put("age", user.age + ""); 

     // URL myUrl = new URL("http://192.168.182.15/connection.php"); 
     // HttpURLConnection conn = (HttpURLConnection) myUrl.openConnection(); 

     try { 
      URL myUrl = new URL("http://192.168.182.15/connection.php"); 
      HttpURLConnection conn = (HttpURLConnection) myUrl.openConnection(); 

      HttpClient client = new HttpClient(); 
      HttpMethod post = new PostMethod("SERVER_ADDRESS"+ "Register.php"); 

      post.setQueryString(new UrlEncodedFormEntity(dataToSend)); 

      client.executeMethod(post); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 



     return null; 
    } 
Смежные вопросы