Отправка и получение данных с сервера с использованием 6.0 API (Android)

Я действительно запутался, я пытаюсь разработать простую функцию, которая позволяет мне отправлять и получать данные с сервера.

Операция заключается в следующем:

В действии я выполняю HTTP POST для файла PHP на сервере, «файл PHP» получает данные, которые я отправляю (обычно строку), и выполняет запрос, используя параметры, отправленные через http.

Пример:

Мое приложение для Android отправляет строку с этим значением «PIPPO», в файле PHP есть запрос, например:

$ value = PIPPO / * данные, полученные из приложения для Android * /
Выберите * из символов, где (characters.name = «. $ Value.»)

постскриптум все данные используют формат JSON

Проблема в:
Я всегда использовал функцию (которая отлично работает), но теперь все методы устарели, я не могу найти альтернативу методам для новейшего API.

Это мой код:

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;

4

Решение

Просто попробуйте этот код. 🙂

    public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Test().execute();
}//AsyncTask
class Test extends AsyncTask < String, Void, String > {

@Override
protected String doInBackground(String...params) {
InputStream in = null;
String queryResult = "";
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection)          url.openConnection();

//add parameters
urlConnection.setReadTimeout(10000);
urlConnection.setConnectTimeout(15000);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);

List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("firstParam", paramValue1));
params.add(new BasicNameValuePair("secondParam", paramValue2));
params.add(new BasicNameValuePair("thirdParam", paramValue3));
try {
//write OutputStream
OutputStream os = urlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();InputStream in = new     BufferedInputStream(urlConnection.getInputStream());
queryResult = readStream( in );
} finally {
urlConnection.disconnect();
}
return queryResult;

}
private String readStream(InputStream iStream) throws IOException {

//Buffered reader allows us to read line by line
try (BufferedReader bReader =
new BufferedReader(new InputStreamReader(iStream))) {
StringBuilder builder = new StringBuilder();
String line;
while ((line = bReader.readLine()) != null) { //Read till end
builder.append(line);
}
return builder.toString();
}
}
private String getQuery(List<NameValuePair> params) throws   UnsupportedEncodingException
{
StringBuilder result = new StringBuilder();
boolean first = true;

for (NameValuePair pair : params)
{
if (first)
first = false;
else
result.append("&");

result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}

return result.toString();
}
protected void onPostExecute(String data) {
// do further things
Toast toast = Toast.makeText(getApplicationContext(), data,
Toast.LENGTH_SHORT);
toast.show();

}

}

}
1

Другие решения

Может быть, это время, когда вы начинаете использовать залп. Это отличная библиотека, созданная специально для решения ваших задач.

Ничего не знаю о залпе. Ну, не волнуйся. Вот это идеальное видео, чтобы рассказать вам, на что способен залп. Он включает в себя все шаги, чтобы включить его в ваш проект (хотя это не более, чем упоминание зависимости gradle)

Я также привожу пример того, как вы можете использовать его в своем коде.

public class MainActivity extends Activity {
private TextView txtDisplay;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtDisplay = (TextView) findViewById(R.id.txtDisplay);

RequestQueue queue = Volley.newRequestQueue(this);
String url = "myurl/queryMobile.php";

JSONObject params = new JSONObject();
params.put("name", "Dexter");

JsonObjectRequest jsObjRequest =
new JsonObjectRequest(Request.Method.POST,
url,
param,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// TODO Auto-generated method stub
txtDisplay.setText("Response => "+response.toString());
findViewById(R.id.progressBar1).setVisibility(View.GONE);
}},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
}
});
queue.add(jsObjRequest);
}
}

Оригинальный код (и учебник) доступен Вот.

Поверьте мне, однажды вам придется перейти на залп, почему бы не сегодня!

0