Исходные файлы представлены ниже.
Суть процесса такова:
- В файл strings.xml записываем свой url, который будет обрабатывать наш POST-запрос.
Код: Виділити все
<string name="urlpost">http://starcity.in.ua/myindex.php</string>
-
В каждом активити вы должны будете изменять переменную context своего активити на свой класс, где она применяется, в данном случае это MainActivity.
Код: Виділити все
Context context = MainActivity.this;
-
Если не нужно отображать всплывающее окошко во время выполнения запроса можно дописать строку как в первом запросе:
Но при этом второй запрос по умолчанию будет отображать это окно, если же надо по умолчанию не отображать, тогда измените в начале класса переменную myshowdialog на false;
Код: Виділити все
myshowdialog = false;
и ниже в коде также произведите следующую замену на falseКод: Виділити все
boolean myshowdialog = false;
Код: Виділити все
if (myshowdialog) myhttppost.MyDialogStop(); else myshowdialog = false;
-
Очищаем предыдущий запрос (в принципе если это первый запрос в нашем активити, то можно удалить эту строку, но при втором обращении она всё же необходима):
Код: Виділити все
hmqr.clear();
-
Передаем POST-переменные и их значения, их может быть сколько угодно. К примеру:
Код: Виділити все
hmqr.put("action", "value1"); hmqr.put("key", "value1a");
-
Отправляем запрос и прописываем название функции, которая будет обрабатывать ответ от сервера:
Код: Виділити все
new MyReqTask().execute("name_function1");
-
Метод MyReturn запускается сразу же после того как придет ответ от сервера и в нем запускается функция, название которой мы указали в предыдущем пункте.
Ответ передается в переменную jsonans, далее собственно проделываем все необходимые нам операции в соответствующей функции.
Здесь я сразу же перевел ответ в JSON-формат в переменную resjson.Код: Виділити все
JSONObject resjson = new JSONObject(jsonans);
-
ВНИМАНИЕ:
Здесь в моем примере я добавил проверку ответа сервера. В ответе на сервере я добавил переменную result равную 1, ну и делается проверка дошла ли эта переменная назад. Если же она равна 0, тогда выдаем ошибку.Код: Виділити все
result = resjson.getInt("result"); if (result == 0) Toast.makeText(getApplicationContext(), getResources().getText(R.string.errorotvet), Toast.LENGTH_LONG).show();
Код: Виділити все
implementation 'com.google.android.gms:play-services-maps:16.0.0'
Файл activity_main.xml не привожу, он может быть любой разметки.
Добавляем в build.gradle (Module:app)
Код: Виділити все
apply plugin: 'com.android.application'
android {
.....
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
}
dependencies {
.....
//noinspection DuplicatePlatformClasses
implementation 'org.apache.httpcomponents:httpclient:4.5.6'
}
Код: Виділити все
<resources>
.....
<string name="urlpost">http://starcity.in.ua/myindex.php</string>
<string name="dowloadtext">Загружаю данные…</string>
<string name="errorotvet">Ошибка сервера!\nНеверный ответ!</string>
<string name="errorfunction1">Ошибка!\nФункция <</string>
<string name="errorfunction2">> не определена!\nОтвет сервера:\n</string>
</resources>
Код: Виділити все
<uses-permission android:name="android.permission.INTERNET" />
.....
<activity android:name=".MyHttpPost" />
Код: Виділити все
package ua.in.starcity.myhttppost;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
public class MainActivity extends Activity {
Context context = MainActivity.this;
MyHttpPost myhttppost = new MyHttpPost(context);
HashMap<String, String> hmqr = new HashMap<>();
boolean myshowdialog = true;
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hmqr.clear();
hmqr.put("action", "value1");
hmqr.put("key", "value1a");
myshowdialog = false;
new MyReqTask().execute("name_function1");
hmqr.clear();
hmqr.put("action", "value2");
hmqr.put("key", "value2a");
new MyReqTask().execute("name_function2");
}
@SuppressLint("StaticFieldLeak")
class MyReqTask extends AsyncTask<String, String, HashMap<String, String>> {
protected HashMap<String, String> doInBackground(String... params) {
HashMap<String, String> hmans = new HashMap<>();
hmans.put("function", params[0]);
hmans.put("query", myhttppost.query(hmqr));
return hmans;
}
protected void onPostExecute(HashMap<String, String> result) {
super.onPostExecute(result);
if (myshowdialog)
myhttppost.MyDialogStop();
else
myshowdialog = true;
MyReturn(result);
}
protected void onPreExecute() {
super.onPreExecute();
if (myshowdialog)
myhttppost.MyDialogStart();
}
}
private void MyReturn(HashMap<String, String> hmret) {
int result;
String jsonans = hmret.get("query");
String function = hmret.get("function");
if (function != null && jsonans != null) {
try {
JSONObject resjson = new JSONObject(jsonans);
result = resjson.getInt("result");
if (result == 0)
Toast.makeText(getApplicationContext(), getResources().getText(R.string.errorotvet), Toast.LENGTH_LONG).show();
switch (function) {
case "name_function1":
Toast.makeText(getApplicationContext(), "name_function1="+jsonans, Toast.LENGTH_LONG).show();
break;
case "name_function2":
Toast.makeText(getApplicationContext(), "name_function2="+jsonans, Toast.LENGTH_LONG).show();
break;
case "name_function3":
break;
case "name_function4":
break;
case "name_function5":
break;
case "name_function6":
break;
case "name_function7":
break;
case "name_function8":
break;
case "name_function9":
break;
default:
Toast.makeText(getApplicationContext(), getResources().getText(R.string.errorfunction1)+function+getResources().getText(R.string.errorfunction2) + jsonans, Toast.LENGTH_LONG).show();
break;
}
} catch (JSONException ignored) {
}
}
}
}
Код: Виділити все
package ua.in.starcity.myhttppost;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MyHttpPost extends Activity {
private final Context context;
ProgressDialog dialog;
public MyHttpPost(Context context) {
this.context = context;
}
public String query(HashMap<String, String> hm) {
String response = null;
try {
DefaultHttpClient hc = new DefaultHttpClient();
ResponseHandler<String> res = new BasicResponseHandler();
HttpPost postMethod = new HttpPost(context.getString(R.string.urlpost));
List<NameValuePair> nameValuePairs = new ArrayList<>(hm.size());
for (HashMap.Entry<String, String> pair : hm.entrySet())
nameValuePairs.add(new BasicNameValuePair(pair.getKey(), pair.getValue()));
postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
response = hc.execute(postMethod, res);
} catch (Exception ignored) {
}
return response;
}
void MyDialogStart() {
dialog = new ProgressDialog(context);
dialog.setMessage(context.getString(R.string.dowloadtext));
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
}
void MyDialogStop() {
dialog.dismiss();
}
}