Вообщем на с сайта заносим данные в БД. Api запускает на исполнение скрипт и читает ответ.
Использовал AsyncTask.
Класс All_mess отображает списки всех сообщений(ListView), которые сформировал php.
После выбора сообщения открывается активити Text_mess для написания ответа. Нужно периодичесски обновлять All_mess + после закрытия Text_mess.
Код: Выделить всё
public class All_mess extends ListActivity {
private ProgressDialog pDialog;
String etlogin = null;
JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> messagesList;
private static String url_all_mess = "http://server/mess.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "messages";
private static final String TAG_MESS_ID = "message_id";
private static final String TAG_COUNT_ALL_MESS = "count_all";
private static final String TAG_LOGIN_BOSS = "login_boss";
// тут будет хранится список продуктов
JSONArray messages = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_all_mess);
// Hashmap for ListView
messagesList = new ArrayList<HashMap<String, String>>();
etlogin = getIntent().getStringExtra("login");
// Загружаем продукты в фоновом потоке
new LoadAllMess().execute();
// получаем ListView
ListView lv = getListView();
// на выбор одного продукта
// запускается Edit Product Screen
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String pid = ((TextView) view.findViewById(R.id.pid)).getText()
.toString();
String login = ((TextView) view.findViewById(R.id.name)).getText()
.toString();
// Запускаем новый intent который покажет нам Activity
Intent in = new Intent(getApplicationContext(), Text_mess.class);
// отправляем pid в следующий activity
in.putExtra(TAG_MESS_ID, pid);
in.putExtra(TAG_LOGIN_BOSS,login);
Log.d(TAG_MESS_ID, pid);
// запуская новый Activity ожидаем ответ обратно
startActivityForResult(in, 100);
}
});
}
// Ответ из Edit Product Activity
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// если результующий код равен 100
if (resultCode == 100) {
// если полученный код результата равен 100
// значит пользователь редактирует или удалил продукт
// тогда мы перезагружаем этот экран
Intent intent = getIntent();
finish();
startActivity(intent);
}
}
public void showAlert(final String Title, final String Mess){
All_mess.this.runOnUiThread(new Runnable() {
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(All_mess.this);
builder.setTitle(Title);
builder.setMessage(Mess)
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
}
/**
* Фоновый Async Task для загрузки всех продуктов по HTTP запросу
* */
class LoadAllMess extends AsyncTask<String, String, String> {
/**
* Перед началом фонового потока Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(All_mess.this);
pDialog.setMessage("Загрузка повідомлень. Зачекайте...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* Получаем все продукт из url
* */
protected String doInBackground(String... args) {
// Будет хранить параметры
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username",etlogin));
// получаем JSON строк с URL
JSONObject json = jParser.makeHttpRequest(url_all_mess, "POST", params);
Log.d("All Messages: ", json.toString());
try {
// Получаем SUCCESS тег для проверки статуса ответа сервера
int success = json.getInt(TAG_SUCCESS);
int count_mess = json.getInt(TAG_COUNT_ALL_MESS);
if (success == 1) {
if(count_mess == 0){
showAlert("Немає повідомлень!", "Для вашого акаунта немає нових повідомлень!");
}else {
// продукт найден
// Получаем масив из Продуктов
messages = json.getJSONArray(TAG_MESSAGE);
// перебор всех продуктов
for (int i = 0; i < messages.length(); i++) {
JSONObject c = messages.getJSONObject(i);
// Сохраняем каждый json елемент в переменную
String id = c.getString(TAG_MESS_ID);
String name = c.getString(TAG_LOGIN_BOSS);
// Создаем новый HashMap
HashMap<String, String> map = new HashMap<String, String>();
// добавляем каждый елемент в HashMap ключ => значение
map.put(TAG_MESS_ID, id);
map.put(TAG_LOGIN_BOSS, name);
Log.d(TAG_MESS_ID,id);
Log.d(TAG_LOGIN_BOSS,name);
// добавляем HashList в ArrayList
messagesList.add(map);
}
}
} else {
showAlert("Помилка!", "Виникла помилка на сервері!");
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* После завершения фоновой задачи закрываем прогрес диалог
* **/
protected void onPostExecute(String file_url) {
// закрываем прогресс диалог после получение все продуктов
pDialog.dismiss();
// обновляем UI форму в фоновом потоке
runOnUiThread(new Runnable() {
public void run() {
/**
* Обновляем распарсенные JSON данные в ListView
* */
ListAdapter adapter = new SimpleAdapter(
All_mess.this, messagesList,
R.layout.list_item, new String[] { TAG_MESS_ID,
TAG_LOGIN_BOSS},
new int[] { R.id.pid, R.id.name });
// обновляем listview
setListAdapter(adapter);
}
});
}
}
}
Код: Выделить всё
public class Text_mess extends Activity {
public String getParam_report() {
return Param_report;
}
public void setParam_report(String param_report) {
Param_report = param_report;
}
public String getParam_id() {
return Param_id;
}
public void setParam_id(String param_id) {
Param_id = param_id;
}
String Param_id;
String Param_report;
String login;
String id;
TextView tv1;
TextView tvquest;
TextView tvdate;
EditText txtansw;
Button yes;
Button no;
JSONParser jParser = new JSONParser();
private static final String TAG_SUCCESS = "success";
private static final String TAG_MESSAGE = "messages";
private static final String TAG_MESS_ID = "message_id";
private static final String TAG_LOGIN_BOSS = "login_boss";
private static final String TAG_POSTED_TIME = "posted_time";
private static final String TAG_TEXT = "text";
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
private static String url_one_mess = "http://server/mess_one.php";
private static String url_add_mess = "http://server/add_mess.php";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_text_mess);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
id = getIntent().getStringExtra(TAG_MESS_ID);
login = getIntent().getStringExtra(TAG_LOGIN_BOSS);
// отримання повідомлень в фоновому потоці
new GetMess().execute();
setParam_id(id);
txtansw = (EditText) findViewById(R.id.txtansw);
yes = (Button) findViewById(R.id.btn1);
no = (Button) findViewById(R.id.btn0);
// обробник кнопки yes
yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setParam_report("1");
Log.d("report", getParam_report());
new CreateNewMess().execute();
}
});
// обробник кнопки no
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setParam_report("0");
Log.d("report", getParam_report());
new CreateNewMess().execute();
}
});
}
/**
* Фонова асинхронна задача
**/
class GetMess extends AsyncTask<String, String, String> {
/**
* Прогресдіалог
**/
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Text_mess.this);
pDialog.setMessage("Загрузка повідомлення.Зачекайте будь-ласка...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Фоновий режим
**/
protected String doInBackground(String[] params) {
// обновляє UI
runOnUiThread(new Runnable() {
public void run() {
// провіряє статус success
int success;
try {
// Список параметрів
Log.d("id", id);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", id));
// отримує JSON рядки з URL
JSONObject json = jParser.makeHttpRequest(url_one_mess, "POST", params);
Log.d("Single Product Details", json.toString());
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// успіх
JSONArray productObj = json.getJSONArray(TAG_MESSAGE);
// отримуєм перший обєкт з JSON Array
JSONObject product = productObj.getJSONObject(0);
// повідомлення знайдено
//
tvquest = (TextView) findViewById(R.id.tvquest);
tv1 = (TextView) findViewById(R.id.tvlogin);
tvdate = (TextView) findViewById(R.id.tvdate);
txtansw = (EditText) findViewById(R.id.txtansw);
//
Log.d(TAG_TEXT, product.getString(TAG_TEXT));
Log.d(TAG_POSTED_TIME, product.getString(TAG_POSTED_TIME));
tv1.setText(login);
tvquest.setText(product.getString(TAG_TEXT));
tvdate.setText(product.getString(TAG_POSTED_TIME));
}
else{
Log.d("TEST","Повідомлення не знайдено!");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
return null;
}
/**
* Закриває прогрес діалог
**/
protected void onPostExecute(String file_url) {
//
pDialog.dismiss();
}
}
class CreateNewMess extends AsyncTask<String, String, String> {
public List<NameValuePair> params = new ArrayList<NameValuePair>();
/**
* Показує загрузку
**/
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Text_mess.this);
pDialog.setMessage("Відправка повідомлення ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* відправка відповіді
**/
protected String doInBackground(String... args) {
// формує параметри
txtansw = (EditText) findViewById(R.id.txtansw);
String annsw = txtansw.getText().toString();
params.add(new BasicNameValuePair("text_answer", annsw));
params.add(new BasicNameValuePair("message_id",getParam_id()));
params.add(new BasicNameValuePair("report",getParam_report()));
// отримує JSON обєкт
JSONObject json = jsonParser.makeHttpRequest(url_add_mess, "POST", params);
// Log.d("Create Response", json.toString());
Log.d("answer", annsw);
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// відповідь відправлена
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(Text_mess.this, "Повідомлення відправлено", Toast.LENGTH_SHORT).show();
}
});
//Intent i = new Intent(getApplicationContext(), All_mess.class);
//???????????? startActivity(i); //перезагрузка содержимого активити .
finish();
} else {
Text_mess.this.runOnUiThread(new Runnable() {
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(Text_mess.this);
builder.setTitle("Виникла помилка!");
builder.setMessage("Повідомлення не було відправлено.")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = builder.create();
alert.show();
}
});
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
}