2015-11-07 3 views
5

У меня проблема с некоторыми устаревшими методами, в частности с этим, который я разместил здесь.Устаревшие методы, как я могу заменить его новым

Что, что я хочу просто: отправить данные на сервер, используя HTTP POST ---> сделать запрос с данными, которые я получаю от клиента -> отправить ответ

Я пытаюсь разработать приложение Android, использующее API 6.0, но все мои методы устарели, что я должен изменить, чтобы преобразовать мой код в новый?

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, ... строки статуса

Я абсолютно необходимо изменить устаревший метод с новым, я не могу изменить весь код.

EDIT 1: Например, в моем MainActivity:

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

Мой класс ReadServer получить во входных двух Params:

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']; 

На данный момент я получаю свои данные, и я могу m аке мой запрос:

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

ответ

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); 
     } 
    } 

UPDATE:

С вашего 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.

Других хорошие решения для вашей справки:

Надеется, что это помогает!

+0

@BKN: В вашем решении я мог видеть, что вы используете хэш-карту для отправки ваших данных на ваш «сервер», в моем проекте мне нужно отправить только две строковые «данные идентификатора» и «данные», например: id_data = "weather" и data = "rainy". Как я могу избежать использования hashmap? спасибо –

+0

Можете ли вы рассказать мне, почему вам не нравится использовать hashmap? – BNK

+0

Конечно, у меня есть файл .php на моем сервере, который я не могу изменить, когда я делаю HTTP-запрос с моего устройства Android, мне нужно отправить с POST ровно две строки, вы можете увидеть небольшую часть моего php код в моем редактировании. –

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