不推荐使用的方法,我如何用新的替换它

时间:2015-11-07 14:47:23

标签: android apache http

我对一些弃用的方法有疑问,特别是我在这里发布的这个。

我想要的很简单:使用http post --->将数据发送到服务器使用我从客户端收到的数据进行查询 - >发送回复

我正在尝试使用API​​ 6.0开发Android应用程序,但我的所有方法都已弃用,我必须更改以使用new转换代码?

public class ReadServer extends Activity {
 String result;
 public String readserver(String id_data, String data){
 try{
  HttpClient httpclient = new DefaultHttpClient();
  HttpPost httpPost = new HttpPost("myurl/queryMobile.php");
  StringBuilder builder = new StringBuilder();
  String json = "";
  //Build jsonObject
  JSONObject jsonObject = new JSONObject();
  jsonObject.accumulate(id_data, data);
  //Convert JSONObject to JSON to String
  json = jsonObject.toString();

  //Set json to StringEntity
  StringEntity se = new StringEntity(json);
  //Set httpPost Entity
  httpPost.setEntity(se);
  //Set some headers to inform server about the type of the content
  httpPost.setHeader("Accept", "application/json");
  httpPost.setHeader("Content-type", "application/json");

  //Execute POST request to the given URL
  HttpResponse httpResponse = httpclient.execute(httpPost);
  //Receive response as inputStream
  StatusLine statusLine = httpResponse.getStatusLine();
  int statusCode = statusLine.getStatusCode();
  //Convert input stream to string
  AlertDialog.Builder alertDialog;

  switch(statusCode){
  case 200:
  HttpEntity entity = httpResponse.getEntity();
  InputStream content = entity.getContent();
  BufferedReader reader = new BufferedReader(new InputStreamReader(content));
  String line="";
  try{
  while ((line = reader.readLine()) != null) {
  builder.append(line);
  result = builder.toString();
  }
  }catch(Exception e){
  alertDialog = new AlertDialog.Builder(this);
  alertDialog.setTitle("400 Bad Request");
  alertDialog.setMessage("Non è stato possibile soddisfare la tua richiesta, riprova più tardi.");
  alertDialog.show();
  }
  break;

  case 500:
  alertDialog = new AlertDialog.Builder(this);
  alertDialog.setTitle("500 Internal Server Error");
  alertDialog.setMessage("Non è stato possibile soddisfare la tua richiesta, riprova più tardi.");
  alertDialog.show();
  break;

  case 503:
  alertDialog = new AlertDialog.Builder(this);
  alertDialog.setTitle("503 Service Unavailable");
  alertDialog.setMessage("Il server di ....non è al momento disponibile, riprova più tardi.");
  alertDialog.show();
  break;

  case 504:
  alertDialog = new AlertDialog.Builder(this);
  alertDialog.setTitle("504 Gateway Timeout");
  alertDialog.setMessage("Il server di ....è momentaneamente sovraccarico, riprova più tardi.");
  alertDialog.show();
  break;

  default:
  alertDialog = new AlertDialog.Builder(this);
  alertDialog.setTitle("Si è verificato un errore");
  alertDialog.setMessage("Errore 001" +"\n"+"Non è stato possibile soddisfare la tua richiesta, riprova più tardi.");
  alertDialog.show();
  break;
  }
  }catch(Exception e){
  AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
  alertDialog.setTitle("Si è verificato un errore");
  alertDialog.setMessage("Errore 001" + "\n" + "Non è stato possibile soddisfare la tua richesta, riprova più tardi.");
  alertDialog.show();
  }
  return result; 
 }
}

我尝试更改某些方法,但我不知道如何转换某些过程,例如:

setEntity,HttpResponse,StatusLine ......

我绝对需要用new更改已弃用的方法,我无法更改所有代码。

编辑1: 例如,在我的MainActivity中:

 ReadServer read = new ReadServer();
 String result = read.readserver("list_news","homepage");

我的类ReadServer输入两个参数:

public String readserver(String id_data, String data){
...
jsonObject.accumulate(id_data, data); // in a jsonObject i put two params
...
}

我制作一个Http Post,我的数据被发送到我的服务器(我的php页面)

$raw = file_get_contents('php://input');
 $value = json_decode($raw, true);
 $list_news = $value['list_news'];

此时我获取了我的数据,我可以进行查询:

if (isset($list_news)) {
 switch($list_news){
  case "homepage":
   $q = "SELECT 
         FROM 
         WHERE ";

1 个答案:

答案 0 :(得分:4)

我认为您可以参考我的以下示例代码,然后将其逻辑用于您的应用:

private class POSTRequest extends AsyncTask<Void, Void, String> {

        @Override
        protected String doInBackground(Void... voids) {
            String address = "http://192.16.1.100:24780/api/token";
            HttpURLConnection urlConnection;
            String requestBody;
            Uri.Builder builder = new Uri.Builder();
            Map<String, String> stringMap = new HashMap<>();
            stringMap.put("grant_type", "password");
            stringMap.put("username", "bnk");
            stringMap.put("password", "bnkpwd");

            Iterator entries = stringMap.entrySet().iterator();
            while (entries.hasNext()) {
                Map.Entry entry = (Map.Entry) entries.next();
                builder.appendQueryParameter(entry.getKey().toString(), entry.getValue().toString());
                entries.remove();
            }
            requestBody = builder.build().getEncodedQuery();

            try {
                URL url = new URL(address);
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setDoInput(true);
                urlConnection.setDoOutput(true);
                // urlConnection.setRequestMethod("POST");
                urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                OutputStream outputStream = new BufferedOutputStream(urlConnection.getOutputStream());
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8"));
                writer.write(requestBody);
                writer.flush();
                writer.close();
                outputStream.close();

                JSONObject jsonObject = new JSONObject();
                InputStream inputStream;
                // get stream
                if (urlConnection.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                    inputStream = urlConnection.getInputStream();
                } else {
                    inputStream = urlConnection.getErrorStream();
                }
                // parse stream
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                String temp, response = "";
                while ((temp = bufferedReader.readLine()) != null) {
                    response += temp;
                }
                // put into JSONObject
                jsonObject.put("Content", response);
                jsonObject.put("Message", urlConnection.getResponseMessage());
                jsonObject.put("Length", urlConnection.getContentLength());
                jsonObject.put("Type", urlConnection.getContentType());

                return jsonObject.toString();
            } catch (IOException | JSONException e) {
                return e.toString();
            }
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Log.i(LOG_TAG, "POST\n" + result);
        }
    }

更新:

使用您的PHP代码,您可以尝试以下更新:

...
                JSONObject json = new JSONObject();
                json.put("key1", "sample value...");
                requestBody = json.toString();
                URL url = new URL(address);
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setDoInput(true);
                urlConnection.setDoOutput(true);
                urlConnection.setRequestProperty("Content-Type", "application/json");
                OutputStream outputStream = new BufferedOutputStream(urlConnection.getOutputStream());
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8"));
                writer.write(requestBody);
                writer.flush();
                writer.close();
                outputStream.close();
...

您可以在Deprecated HTTP Classes阅读更多内容。

其他好的解决方案供您参考:

希望这有帮助!