2017-06-01 136 views
0

我试图使用这种方法,我也试图给libriries,但一切徒劳。请帮助我。没有任何HTTPClient库在我的andriod studio上显示。帮助仍然使用的是HttpClient.You可以使用HttpURLConnection类,排球等HttpClient的类现在deprecated.Also添加Internet权限,dependensies在gradle这个文件理解HttP Post方法不起作用

public String getHttpPost(String url,ContentValues) { 
     StringBuilder str = new StringBuilder(); 

     HttpClient client = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     try { 
      httpPost.setEntity(new UrlEncodedFormEntity(params)); 
      HttpResponse response = client.execute(httpPost); 
      StatusLine statusLine = response.getStatusLine(); 
      int statusCode = statusLine.getStatusCode(); 
      if (statusCode == 200) { // Status OK 
       HttpEntity entity = response.getEntity(); 
       InputStream content = entity.getContent(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        str.append(line); 
       } 
      } else { 
       Log.e("Log", "Failed to download result.."); 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return str.toString(); 
    } 
+0

您是否在您的gradle文件中添加了依赖关系? – Prexx

+0

您是否在AndroidManifeast.xml中添加了Internet权限 –

+0

您是否想要另一种方法进行网络调用,例如使用库如volley或Retrofit? –

回答

0

哦!

HttpURLConnection urlConnection = null; 
       try { 
        URL urlToRequest = new URL(_url); 
        urlConnection = (HttpURLConnection) urlToRequest.openConnection(); 
        urlConnection.setConnectTimeout(30000); 
        urlConnection.setReadTimeout(30000); 
        urlConnection.setDoOutput(true); 
        urlConnection.setDoInput(true); 
        urlConnection.setRequestProperty("Content-Type", "application/json"); 
        urlConnection.setRequestProperty("Accept", "application/json"); 

        if (_authenticationKey != null) { 
         urlConnection.setRequestProperty(_authenticationKey, _authenticationValue); 
        } 
        if (_jsonPacket != null) { 
         OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream()); 
         wr.write(_jsonPacket); 
         wr.flush(); 
        } 

        int statusCode = urlConnection.getResponseCode(); 

        JSONObject job; 
        if (statusCode != HttpURLConnection.HTTP_OK) { 
         InputStream in = new BufferedInputStream(urlConnection.getErrorStream()); 
         String responseString = getResponseString(in); 
         if (isJSONValid(responseString)) { 
          job = new JSONObject(responseString); 
          return new PostingResult(job, Constants.IntegerConstants.failureFromWebService, ""); 
         } else { 
          return new PostingResult(null, statusCode, Constants.StringConstants.serverCommunicationFailed + "Response code = " + statusCode); 
         } 

        } else { 
         InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
         String responseString = getResponseString(in); 
         if (isJSONValid(responseString)) { 
          job = new JSONObject(responseString); 
          return new PostingResult(job, Constants.IntegerConstants.success, ""); 
         } else { 
          return new PostingResult(null, statusCode, Constants.StringConstants.serverCommunicationFailed + Constants.StringConstants.serverReadingResponseFailed); 
         } 
        } 
+0

我已经添加了INTERNET权限并且还添加了依赖关系 –

0

您可以使用“Volley”库进行网络调用。

例如。

  1. 中的build.gradle加入这一行(模块:APP)

    编译 'com.mcxiaoke.volley:图书馆:1.0.19'

  2. 当你正在网络呼叫,您需要互联网许可。因此,添加Internet权限行的Manifest.xml

  • 现在你需要编写你的类里面的小方法,你需要让网络通话和需要将Hashmap传递给它。散列表包含您的所有发布参数。

    private void getJSONResponse(HashMap<String, String> map, String url) { 
         pd.show(); 
         JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, new JSONObject(map), new Response.Listener<JSONObject>() { 
          @Override 
          public void onResponse(JSONObject response) { 
           Log.d("Mayur", "Response : " + response); 
           //tv_res.setText(response.toString()); 
           //pd.dismiss(); 
          } 
         }, new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError error) { 
           Toast.makeText(MainActivity.this, "Error Occured", Toast.LENGTH_SHORT).show(); 
           //tv_res.setText("ERROR"); 
           //pd.dismiss(); 
          } 
         }); 
    request.setRetryPolicy(new DefaultRetryPolicy(20000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));Volley.newRequestQueue(this).add(request);} 
    
  • 现在,在您的onCreate方法或任何其他方法只是创建后的参数的HashMap和它传递给该方法与帖子的网址。

    例如。

    HashMap<String, String> map = new HashMap<String, String>(); 
         map.put("fname", "Mayur"); 
         map.put("lname", "Thakur"); 
    getJSONResponse(map,<your url>); 
    
    +0

    改造是另一个需要考虑的好的库。 – nasch

    +0

    是的,它是....... –