如何在android中将列表从后台服务发送到活动
我想把一个列表从后台服务发送到android中的活动如何在android中将列表从后台服务发送到活动,android,android-asynctask,android-service,Android,Android Asynctask,Android Service,我想把一个列表从后台服务发送到android中的活动 public class MyService extends Service{ private String receiverUserInfoId; private String loginUserInfoId; private String orgMsgThreadId; private String userName = "Vipin"; DatabaseHelper db; Messag
public class MyService extends Service{
private String receiverUserInfoId;
private String loginUserInfoId;
private String orgMsgThreadId;
private String userName = "Vipin";
DatabaseHelper db;
MessageListActivity ms;
private String userAvatarURL;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
db = new DatabaseHelper(getApplicationContext());
Bundle extra = intent.getExtras();
loginUserInfoId = extra.getString("LoginUserInfoId");
receiverUserInfoId=extra.getString("UserInfoId");
orgMsgThreadId = extra.getString("OrgMessageThreadId");
userName=extra.getString("UserName");
userAvatarURL=extra.getString("UserAvatarURL");
new syncMessageFromServer().execute();
new SyncPendingMessageToServer();
return super.onStartCommand(intent, flags, startId);
}
private class syncMessageFromServer extends AsyncTask<Void, Integer, String> {
@Override
protected void onPreExecute() {
// setting progress bar to zero
//progressBar.setProgress(0);
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... progress) {
}
@Override
protected String doInBackground(Void... params) {
return uploadFile();
}
@SuppressWarnings("deprecation")
private String uploadFile() {
String str = "";
HttpResponse response;
HttpClient myClient = new DefaultHttpClient();
HttpPost myConnection = new HttpPost("http://192.168.1.2/AndroidApp/GetMessage?loginUserInfoId=" + loginUserInfoId + "&recieverUserInfoId=" + receiverUserInfoId + "&isPendingToSynce=" + true);
try {
response = myClient.execute(myConnection);
str = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
JSONArray jArray = new JSONArray(str);
for (int i = 0; i <= jArray.length() - 1; i++) {
JSONObject row = jArray.getJSONObject(i);
ChatMessage cm = new ChatMessage();
cm.setOriginalMsgThreadId(row.getString("MessageThreadId"));
cm.setSenderUserInfoId(row.getString("SenderUserId"));
cm.setReceiverUserInfoId(row.getString("MultipleReceiversId"));
cm.setMessageStatus("SENT");
cm.setIsPending(0);
cm.setMessageText(row.getString("MessageText"));
cm.setMediaURL(offlineFileURL);
cm.setThumbImage(offlineFileURL);
cm.setMediaMIMEType("");
cm.setMediaSize(0);
cm.setMediaName("");
cm.setLatitude("");
cm.setLongitude("");
cm.setSendTimeStamp(row.getString("SendTime"));
cm.setReceiveTimeStamp(row.getString("ReadTime"));
long messageThreadId = db.SendMessage(cm);
MessageListActivity mLA = new MessageListActivity();
mLA.SetListData(cm);
}
} catch (JSONException e) {
e.printStackTrace();
}
return str;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
new syncMessageFromServer().execute();
}
}
}
公共类MyService扩展服务{
私有字符串receiverUserInfoId;
私有字符串loginUserInfoId;
私有字符串orgMsgThreadId;
私有字符串userName=“Vipin”;
数据库辅助数据库;
messagelistms;
私有字符串userAvatarURL;
@凌驾
public void onCreate(){
super.onCreate();
}
@凌驾
公共空间{
super.ondestory();
}
@凌驾
公共int onStartCommand(Intent Intent、int标志、int startId){
db=新的DatabaseHelper(getApplicationContext());
Bundle extra=intent.getExtras();
loginUserInfoId=extra.getString(“loginUserInfoId”);
receiverUserInfoId=extra.getString(“UserInfoId”);
orgMsgThreadId=extra.getString(“OrgMessageThreadId”);
userName=extra.getString(“用户名”);
userAvatarURL=extra.getString(“userAvatarURL”);
新建syncMessageFromServer().execute();
新建SyncPendingMessageToServer();
返回super.onStartCommand(intent、flags、startId);
}
私有类syncMessageFromServer扩展异步任务{
@凌驾
受保护的void onPreExecute(){
//将进度条设置为零
//progressBar.setProgress(0);
super.onPreExecute();
}
@凌驾
受保护的void onProgressUpdate(整数…进度){
}
@凌驾
受保护字符串doInBackground(无效…参数){
返回上传文件();
}
@抑制警告(“弃用”)
私有字符串上传文件(){
字符串str=“”;
HttpResponse响应;
HttpClient myClient=新的默认HttpClient();
HttpPost myConnection=新的HttpPost(“http://192.168.1.2/AndroidApp/GetMessage?loginUserInfoId=“+LoginUserInfo+”&ReceiveUserInfoId=“+ReceiveUserInfoId+”&isPendingToSynce=“+true”);
试一试{
response=myClient.execute(myConnection);
str=EntityUtils.toString(response.getEntity(),“UTF-8”);
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
JSONArray jArray=新JSONArray(str);
对于(int i=0;i如果要与活动进行通信,您需要使用messenger。请按以下方式更改您的服务:
public class MyService extends Service{
public static int MESSENGER = 1;
public static int JSONARRAY = 2;
private String receiverUserInfoId;
private String loginUserInfoId;
private String orgMsgThreadId;
private String userName = "Vipin";
DatabaseHelper db;
MessageListActivity ms;
private String userAvatarURL;
Messenger messageActivity;
final Messenger mMessenger = new Messenger(new IncomingHandler());
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case MESSENGER:
messageActivity = msg.replyTo;
break;
}
}
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
db = new DatabaseHelper(getApplicationContext());
Bundle extra = intent.getExtras();
loginUserInfoId = extra.getString("LoginUserInfoId");
receiverUserInfoId=extra.getString("UserInfoId");
orgMsgThreadId = extra.getString("OrgMessageThreadId");
userName=extra.getString("UserName");
userAvatarURL=extra.getString("UserAvatarURL");
new syncMessageFromServer().execute();
new SyncPendingMessageToServer();
return super.onStartCommand(intent, flags, startId);
}
private class syncMessageFromServer extends AsyncTask<Void, Integer, String> {
@Override
protected void onPreExecute() {
// setting progress bar to zero
//progressBar.setProgress(0);
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... progress) {
}
@Override
protected String doInBackground(Void... params) {
return uploadFile();
}
@SuppressWarnings("deprecation")
private String uploadFile() {
String str = "";
HttpResponse response;
HttpClient myClient = new DefaultHttpClient();
HttpPost myConnection = new HttpPost("http://192.168.1.2/AndroidApp/GetMessage?loginUserInfoId=" + loginUserInfoId + "&recieverUserInfoId=" + receiverUserInfoId + "&isPendingToSynce=" + true);
try {
response = myClient.execute(myConnection);
str = EntityUtils.toString(response.getEntity(), "UTF-8");
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
JSONArray jArray = new JSONArray(str);
messageActivity.send(Message.obtain(null, JSONARRAY, jArray.toString()));
} catch (JSONException e) {
e.printStackTrace();
}
return str;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
new syncMessageFromServer().execute();
}
}
}
通过这种方式,您的活动将绑定到服务,并且您可以在它们之间进行通信。我希望您能从这段代码中获得想法并实现所需的功能
这是阅读有关此方法的更多信息的来源。您也可以使用Otto。它用于传递消息,而无需保留侦听器引用。这意味着您不必担心活动的重新创建。您可以在此处找到文档和设置:
public class MyListActivity extends Activity{
public static Messenger mService = null;
public final Messenger mMessenger = new Messenger(new IncomingHandler());
public boolean mIsBound = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_participant);
doBindService();
}
public void doBindService() {
if (!mIsBound) {
context.bindService(new Intent(context,
MyService.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
}
}
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder service) {
mService = new Messenger(service);
try {
Message msg = Message.obtain(null, MyService.MESSENGER);
msg.replyTo = mMessenger;
mService.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
}
public void onServiceDisconnected(ComponentName className) {
mService = null;
}
};
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MyService.JSONARRAY:
buildTheChatMessage((JsonArray)msg.obj);
break;
default:
super.handleMessage(msg);
}
}
}
public void buildTheChatMessage(JsonArray arr){
ChatMessage cm = new ChatMessage();
cm.setOriginalMsgThreadId(row.getString("MessageThreadId"));
cm.setSenderUserInfoId(row.getString("SenderUserId"));
cm.setReceiverUserInfoId(row.getString("MultipleReceiversId"));
cm.setMessageStatus("SENT");
cm.setIsPending(0);
cm.setMessageText(row.getString("MessageText"));
cm.setMediaURL(offlineFileURL);
cm.setThumbImage(offlineFileURL);
cm.setMediaMIMEType("");
cm.setMediaSize(0);
cm.setMediaName("");
cm.setLatitude("");
cm.setLongitude("");
cm.setSendTimeStamp(row.getString("SendTime"));
cm.setReceiveTimeStamp(row.getString("ReadTime"));
setListData(cm);
}
}