Ребят, вот смотрите, я с горем пополам смог написать программку которая отправляет на сервер данные($_post) и получает результат в формате json. делал по примеру одного урока
Так вот, теперь возникла другая задачка над которой бьюсь довольно долго но ниче не могу сообразить.
Нужно чтобы программа постоянно принимала данные, например инфа на сервере изменилась и это тут же отобразилась в программе.
Подскажите как что сделать.
Код MainActivity
Код: Выделить всё
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
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.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
public EditText login;
public EditText pass;
private ProgressDialog dialog;
private InputStream is;
SecondActivity url;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.button1);
login = (EditText) findViewById(R.id.editText1);
pass = (EditText) findViewById(R.id.editText2);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// указываем куда будем конектится
new RequestTask().execute("http://myhomepage.hol.es/login.php");
}
});
}
class RequestTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
try {
//создаем запрос на сервер
DefaultHttpClient hc = new DefaultHttpClient();
ResponseHandler<String> res = new BasicResponseHandler();
//он у нас будет посылать post запрос
HttpPost postMethod = new HttpPost(params[0]);
//будем передавать два параметра
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
//передаем параметры из наших текстбоксов
//лоигн
nameValuePairs.add(new BasicNameValuePair("login", login.getText().toString()));
//пароль
nameValuePairs.add(new BasicNameValuePair("pass", pass.getText().toString()));
//собераем их вместе и посылаем на сервер
postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//получаем ответ от сервера
String response = hc.execute(postMethod, res);
//посылаем на вторую активность полученные параметры
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//то что куда мы будем передавать и что, putExtra(куда, что);
intent.putExtra(SecondActivity.JsonURL, response.toString());
startActivity(intent);
} catch (Exception e) {
System.out.println("Exp=" + e);
}
return null;
}
@Override
protected void onPostExecute(String result) {
dialog.dismiss();
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
dialog = new ProgressDialog(MainActivity.this);
dialog.setMessage("Загружаюсь...");
dialog.setIndeterminate(true);
dialog.setCancelable(true);
dialog.show();
super.onPreExecute();
}
}
}
код SecondActivity
Код: Выделить всё
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
public class SecondActivity extends Activity {
public static String JsonURL;
private static ArrayList<HashMap<String, Object>> myBooks;
private static final String FIRST = "firstname";
private static final String LAST = "lastname";
public ListView listView;
/** @param result */
public void JSONURL(String result) {
try {
//создали читателя json объектов и отдали ему строку - result
JSONObject json = new JSONObject(result);
//дальше находим вход в наш json им является ключевое слово data
JSONArray urls = json.getJSONArray("data");
//проходим циклом по всем нашим параметрам
for (int i = 0; i < urls.length(); i++) {
HashMap<String, Object> hm;
hm = new HashMap<String, Object>();
//читаем что в себе хранит параметр firstname
hm.put(FIRST, urls.getJSONObject(i).getString("firstName").toString());
//читаем что в себе хранит параметр lastname
hm.put(LAST, urls.getJSONObject(i).getString("lastName").toString());
myBooks.add(hm);
//дальше добавляем полученные параметры в наш адаптер
SimpleAdapter adapter = new SimpleAdapter(SecondActivity.this, myBooks, R.layout.list,
new String[] { FIRST, LAST, }, new int[] { R.id.text1, R.id.text2 });
//выводим в листвбю
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.url);
listView = (ListView) findViewById(R.id.list);
myBooks = new ArrayList<HashMap<String, Object>>();
//принимаем параметр который мы послылали в manActivity
Bundle extras = getIntent().getExtras();
//превращаем в тип стринг для парсинга
String json = extras.getString(JsonURL);
//передаем в метод парсинга
JSONURL(json);
}
}