當前位置:首頁 » 安卓系統 » androidservice傳遞參數

androidservice傳遞參數

發布時間: 2022-08-21 21:04:14

㈠ Android service傳遞問題

我只學過java,沒學過C;在我的理解范圍內,java並沒有指針概念。你所說的
class B(Service service) {
mBservice = service;
}
傳過去的是一個對象,當service沒有被啟動的時候,傳過去的就是null。當service啟動的時候,傳過去的是service的一個對象的引用。
也許你真的不該用c的那一套,理解java。java屬於面向對象語言,不存在指針。

㈡ android service 中怎樣接受activity傳遞過來的參數

可以參考如下內容:

service類必須實現一個接收方法,接收中傳遞的是intent
@Override
public IBinder onBind(Intent intent) {
Bundle bundle = intent.getExtras();
String stringVal = bundle.getString("stringValue"); //用於接收字元串
int numVal = bundle.getInt("intValue"); //用於接收int類型數據
byte[] bytes = bundle.getByteArray("bytesValue"); //用於接收位元組流,你可以把文件放入位元組流
return null;
}

你可以用Bundle來接受你從Activity發過來的數據,然後使用Bundle提供各個方法來接受數據。
如果僅僅是字元串之類的,
使用getStringExtra方法直接接收即可。
@Override
public IBinder onBind(Intent intent) {
String str1 = intent.getStringExtra("str1");
String str2 = intent.getStringExtra("str2");
return null;
}

㈢ Android的Service如何獲取Activity傳入的值

你寫putExtra方法時,是否就傳入的null,因為在用getStringExtra方法時候,獲取不到值,才會返回一個空值.打個log看下,是否將你想要的參數傳進去了

㈣ android啟動一個service,然後用service檢測系統使用intent啟動activity。每次啟動傳遞不同的圖片參數。

startActivity(MyIntent);這個只是顯示activity,而activity實際已經存在,所以他只顯示出來,不刷新。這個是你對activity的生命周期了解還不夠的原因。

解決辦法是在你的activity里onresume()里重寫 refresh()函數就好。這樣就實現了。onresume就再次創建.
private void refresh() {
/*finish();
Intent intent = new Intent(RefreshActivityTest.this, RefreshActivityTest.class);
startActivity(intent);*/

onCreate(null);
}

㈤ android調用webservice怎麼傳遞對象

1.webservice方法要傳遞參數的對象中包含了日期類型,guid類型。如下所示:

[html] view plain
POST /MyWebService.asmx HTTP/1.1
Host: 192.168.11.62
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/AddMaintenanceInfo"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<AddMaintenanceInfo xmlns="http://tempuri.org/">
<model>
<Id>guid</Id>
<CarId>guid</CarId>
<Cost>string</Cost>
<Dates>dateTime</Dates>
</model>
</AddMaintenanceInfo>
</soap:Body>
</soap:Envelope>

2.新建一個類CarMaintenanceInfo用於傳遞參數對象,並使其實現KvmSerializable,如下

[java] view plain
public class CarMaintenanceInfo implements KvmSerializable {

/**
* 車輛ID
*/
public String CarId;

/**
* 車輛維修費用
*/
public String Cost;

public String Dates;

@Override
public Object getProperty(int arg0) {
switch (arg0) {
case 0:
return CarId;
case 1:
return Cost;
case 2:
return Dates;
default:
break;
}
return null;
}

@Override
public int getPropertyCount() {
return 3;
}

@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
switch (arg0) {
case 0:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "CarId";
break;
case 1:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "Cost";
break;
case 2:
arg2.type = PropertyInfo.STRING_CLASS;
arg2.name = "Dates";
break;
default:
break;
}
}

@Override
public void setProperty(int arg0, Object arg1) {
switch (arg0) {
case 0:
CarId = arg1.toString();
break;
case 1:
Cost = arg1.toString();
break;
case 2:
Dates = arg1.toString();
break;
default:
break;
}

}

}

注意:getPropertyCount的值一定要與該類對象的屬性數相同,否則在傳遞到伺服器時,伺服器收不到部分對象的屬性。

3.編寫請求方法,如下:

[java] view plain
public boolean addMaintenanceInfo(Context context) throws IOException, XmlPullParserException {

String nameSpace = "http://tempuri.org/";
String methodName = "AddMaintenanceInfo";
String soapAction = "http://tempuri.org/AddMaintenanceInfo";

String url = "http://192.168.11.62:6900/MyWebService.asmx?wsdl";// 後面加不加那個?wsdl參數影響都不大

CarMaintenanceInfo info = new CarMaintenanceInfo();
info.setProperty(0, "9fee02c9-8785-4b49-b389-58ed6562c66d");
info.setProperty(1, "12778787");
info.setProperty(2, "2013-07-29T16:45:20");

// 建立webservice連接對象
org.ksoap2.transport.HttpTransportSE transport = new HttpTransportSE(url);
transport.debug = true;// 是否是調試模式

// 設置連接參數
SoapObject soapObject = new SoapObject(nameSpace, methodName);
PropertyInfo objekt = new PropertyInfo();
objekt.setName("model");
objekt.setValue(info);
objekt.setType(info.getClass());
soapObject.addProperty(objekt);

// 設置返回參數
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);// soap協議版本必須用SoapEnvelope.VER11(Soap
// V1.1)
envelope.dotNet = true;// 注意:這個屬性是對dotnetwebservice協議的支持,如果dotnet的webservice
// 不指定rpc方式則用true否則要用false
envelope.bodyOut = transport;
envelope.setOutputSoapObject(soapObject);// 設置請求參數
// new MarshalDate().register(envelope);
envelope.addMapping(nameSpace, "CarMaintenanceInfo", info.getClass());// 傳對象時必須,參數namespace是webservice中指定的,

// claszz是自定義類的類型
try {
transport.call(soapAction, envelope);
// SoapObject sb = (SoapObject)envelope.bodyIn;//伺服器返回的對象存在envelope的bodyIn中
Object obj = envelope.getResponse();// 直接將返回值強制轉換為已知對象
Log.d("WebService", "返回結果:" + obj.toString());

}
catch (IOException e) {
e.printStackTrace();
}
catch (XmlPullParserException e) {
e.printStackTrace();
}
catch (Exception ex) {
ex.printStackTrace();
}

return true;

// 解析返回的結果
// return Boolean.parseBoolean(new AnalyzeUtil().analyze(response));
}

注意:傳遞date類型的時候其實可以使用Date而不是String。但是需要修改幾個地方
1.CarMaintenanceInfo類中的getPropertyInfo(),將arg2.type = PropertyInfo.STRING_CLASS修改為MarshalDate.DATE_CLASS;
2. 在請求方法中的 envelope.setOutputSoapObject(soapObject);下加上 new MarshalDate().register(envelope);
雖然可以使用Date,但是傳到伺服器上的時間與本地時間有時差問題。

當Android 調用webservice,請求參數中有日期,guid,double時,將這些類型在添加對象前轉換為字元串即可。

[java] view plain
// 構造request
SoapObject request = new SoapObject(PublishInfo.NAMESPACE, "GetCarListByRegion");
request.addProperty("leftTopLat", String.valueOf(leftTopLat));
request.addProperty("leftTopLng", String.valueOf(leftTopLng));
request.addProperty("rightBottomLat", String.valueOf(rightBottomLat));
request.addProperty("rightBottomLng", String.valueOf(rightBottomLng));

當需要傳遞一個伺服器對象參數時.
[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetLicenseDetails xmlns="http://tempuri.org/">
<companyId>guid</companyId>
<licenseNos>
<string>string</string>
<string>string</string>
</licenseNos>
<pageOptions>
<page>int</page>
<rows>int</rows>
<total>int</total>
<sort>string</sort>
<order>string</order>
<skip>int</skip>
<Remark>string</Remark>
</pageOptions>
</GetLicenseDetails>
</soap:Body>
</soap:Envelope>

[java] view plain
public ListPageResult<LicenseInfo> getLicenseDetails(String[] licenseNos, int page, int rows, int total) {
// 構造request
SoapObject request = new SoapObject(PublishInfo.NAMESPACE, "GetLicenseDetails");
// 許可證列表
SoapObject deviceObject = new SoapObject(PublishInfo.NAMESPACE, "GetLicenseDetails");
if (licenseNos != null && licenseNos.length > 0) {
for (int i = 0; i < licenseNos.length; i++) {
if (!"".equals(licenseNos[i])) {
deviceObject.addProperty("string", licenseNos[i]);
}
}
request.addProperty("licenseNos", deviceObject);
}
else {
request.addProperty("licenseNos", null);
}
// 分頁數據
SoapObject optionObject = new SoapObject(PublishInfo.NAMESPACE, "PageOptions");
optionObject.addProperty("page", page);
optionObject.addProperty("rows", rows);
optionObject.addProperty("total", total);
optionObject.addProperty("sort", null);
optionObject.addProperty("order", "desc");
optionObject.addProperty("skip", 0);
optionObject.addProperty("Remark", null);
request.addProperty("pageOptions", optionObject);
// 獲取response
Object response = sendRequest(context, request);
if (!mNetErrorHanlder.hasError(response)) { return ObjectAnalyze.getLicenseDetails(response); }
return null;
}

㈥ android 如何調用默認瀏覽器(webservice)打開網頁使用post的方式傳遞參數。

用HttpURLConnection對象,我們可以向網路發送請求參數. String requestUrl = "http://localhost:8080/itcast/contanctmanage.do"; Map<String, String> requestParams = new HashMap<String, String>(); requestParams.put("age", "12"); requestParams.put("name", "中國"); StringBuilder params = new StringBuilder(); for(Map.Entry<String, String> entry : requestParams.entrySet()){ params.append(entry.getKey()); params.append("="); params.append(URLEncoder.encode(entry.getValue(), "UTF-8")); params.append("&"); } if (params.length() > 0) params.deleteCharAt(params.length() - 1); byte[] data = params.toString().getBytes(); URL realUrl = new URL(requestUrl); HttpURLC...

㈦ android 怎樣用AIDL Service 傳遞復雜數據

第一步:部署我們的服務端,也就是Service端:

1:在Service端我先自定義2個類型:Person和Pet。因為我們需要跨進程傳遞Person對象和Pet對象,所以Person類和Pet類都必須實現Parcelable介面,並要求在實現類中定義一個名為CREATER,類型為Parcelable.creator的靜態Field。
2:創建完自定義類型之後還需要用AIDL來定義它們,Person.aidl和Pet.aidl的代碼如下:
1 package com.example.remoteservice;
2 parcelable Person;
1 package com.example.remoteservice;
2 parcelable Pet;

3:完成1,2之後就可以使用AIDL定義通信介面了,在這里我定義一個IPet.aidl的介面,代碼如下:
1 package com.example.remoteservice; //必須導入包
2 import com.example.remoteservice.Person; //指定自定義類的位置
3 import com.example.remoteservice.Pet;
4
5 interface IPet
6 {
7 List getPets(in Person owner);//這里的in表示Person對象是輸入的參數
8 }

4:服務端的最後一步就是實現Service了,當然不要忘了注冊Service,代碼如下:
1 package com.example.remoteservice;
2
3 import com.example.remoteservice.IPet.Stub;
4
5 import java.util.ArrayList;
6 import java.util.HashMap;
7 import java.util.List;
8 import java.util.Map;
9
10 import android.app.Service;
11 import android.content.Intent;
12 import android.os.IBinder;
13 import android.os.RemoteException;
14 import android.util.Log;
15
16 public class RemoteService extends Service {
17
18 private PetBinder petBinder;
19
20 private static Map> pets = new HashMap>();
21 static {
22 ArrayList list1 = new ArrayList();
23 list1.add(new Pet(candy, 2.2f));
24 list1.add(new Pet(sandy, 4.2f));
25 pets.put(new Person(1, sun, sun), list1);
26
27 ArrayList list2 = new ArrayList();
28 list2.add(new Pet(moon, 5.2f));
29 list2.add(new Pet(hony, 6.2f));
30 pets.put(new Person(1, csx, csx), list2);
31
32 }
33
34 public class PetBinder extends Stub {// 繼承IPet介面中的Stub類,Stub類繼承了Binder類,所有PetBinder也間接的繼承了Binder類
35
36 @Override
37 public List getPets(Person owner) throws RemoteException {
38
39 return pets.get(owner);
40 }
41
42 }
43
44 @Override
45 public IBinder onBind(Intent intent) {
46
47 Log.i(csx, onBind);
48 return petBinder;
49 }
50
51 @Override
52 public void onCreate() {
53
54 super.onCreate();
55 Log.i(csx, onCreate);
56 petBinder = new PetBinder();// 實例化Binder
57
58 }
59
60 @Override
61 public boolean onUnbind(Intent intent) {
62
63 Log.i(csx, onUnbind);
64 return super.onUnbind(intent);
65 }
66
67 @Override
68 public void onDestroy() {
69
70 super.onDestroy();
71 Log.i(csx, onDestroy);
72 }
73
74 }

第二步:部署客戶端:

1.在客戶端新建一個包,命名需要和服務端放置aidl文件的包名相同(我這里是com.example.remoteservice),然後把服務端的Person.java,Pet.java,Person.aidl,Pet.aidl,IPet.aidl復制到這個包下面

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20150108/20150108092529213.png2.在activity中綁定遠程服務進行數據交換,layout布局和activity代碼如下:

data-cke-saved-src=http://www.2cto.com/uploadfile/Collfiles/20150108/20150108092531218.png

復制代碼
1 package com.example.remoteclient;
2
3 import android.app.Service;
4 import android.content.ComponentName;
5 import android.content.Intent;
6 import android.content.ServiceConnection;
7 import android.os.Bundle;
8 import android.os.IBinder;
9 import android.os.RemoteException;
10 import android.support.v7.app.ActionBarActivity;
11 import android.util.Log;
12 import android.view.View;
13 import android.view.View.OnClickListener;
14 import android.widget.ArrayAdapter;
15 import android.widget.Button;
16 import android.widget.EditText;
17 import android.widget.ListView;
18
19 import com.example.remoteservice.IPet;
20 import com.example.remoteservice.Person;
21 import com.example.remoteservice.Pet;
22
23 import java.util.List;
24
25 public class RemoteClient extends ActionBarActivity {
26
27 public static final String REMOTE_SERVICE_ACTION = com.example.remoteservice.RemoteService.ACTION;
28 EditText editText;
29 Button button;
30 ListView listView;
31
32 IPet petService;// 聲明IPet介面
33 List pets;
34 ServiceConnection conn = new ServiceConnection() {
35
36 @Override
37 public void onServiceDisconnected(ComponentName name) {
38 Log.i(csx, onServiceDisconnected);
39 conn = null;
40 }
41
42 @Override
43 public void onServiceConnected(ComponentName name, IBinder service) {
44 Log.i(csx, onServiceConnected);
45 petService = IPet.Stub.asInterface(service);// 通過遠程服務的Binder實現介面
46
47 }
48 };
49
50 @Override
51 protected void onCreate(Bundle savedInstanceState) {
52 super.onCreate(savedInstanceState);
53 setContentView(R.layout.remote_client_layout);
54 editText = (EditText) findViewById(R.id.editText_person);
55 button = (Button) findViewById(R.id.button_ok);
56 listView = (ListView) findViewById(R.id.listView_pet);
57
58 Intent service = new Intent();
59 service.setAction(REMOTE_SERVICE_ACTION);
60
61 bindService(service, conn, Service.BIND_AUTO_CREATE);// 綁定遠程服務
62
63 button.setOnClickListener(new OnClickListener() {
64
65 @Override
66 public void onClick(View v) {
67 String personName = editText.getText().toString();
68 if (personName == null || personName.equals()) {
69
70 return;
71 }
72
73 try {
74 pets = petService.getPets(new Person(1, personName, personName));// 調用遠程service的getPets方法
75 updataListView();
76
77 } catch (RemoteException e) {
78
79 e.printStackTrace();
80 } catch (NullPointerException e) {
81 e.printStackTrace();
82 }
83
84 }
85 });
86
87 }
88
89 public void updataListView() {
90 listView.setAdapter(null);
91
92 if (pets == null || pets.isEmpty()) {
93 return;
94
95 }
96 ArrayAdapter adapter = new ArrayAdapter(RemoteClient.this,
97 android.R.layout.simple_list_item_1, pets);
98 listView.setAdapter(adapter);
99
100 }
101
102 @Override
103 protected void onDestroy() {
104
105 unbindService(conn);// 解除綁定
106 super.onDestroy();
107 }
108
109 }
到此為止所有的工作都完成了,下面我們看一下效果:我在編輯框中輸入「csx」,點擊確定,就會顯示出服務端RemoteService中pets的相應數據。

㈧ android怎麼給本地service傳送數據

在application裡面添加handler的set,get方法,在activity裡面用handler發送,在service裡面實現Handler.Callback介面,在handlemessage裡面接收

熱點內容
ipadid密碼是什麼 發布:2025-01-15 15:14:55 瀏覽:506
怎麼更改下載存儲位置 發布:2025-01-15 15:00:28 瀏覽:844
sql月最後一天 發布:2025-01-15 14:59:45 瀏覽:38
csol倉庫安全密碼是什麼 發布:2025-01-15 14:51:15 瀏覽:582
壓縮平音 發布:2025-01-15 14:49:44 瀏覽:303
粉色的編譯器 發布:2025-01-15 14:41:36 瀏覽:607
數控車床編程加工 發布:2025-01-15 14:31:43 瀏覽:717
怎麼破解iphone5密碼 發布:2025-01-15 14:26:48 瀏覽:435
php數組列印 發布:2025-01-15 14:15:56 瀏覽:623
java流的關閉 發布:2025-01-15 14:15:55 瀏覽:756