从一个class获取webservice的响应字符串到android中的另一个
Get the response string of webservice from one class to other in android
在我的应用程序中,我习惯于通过编辑给出一个字符串值来调用网络服务 text.and 我可以从网络上获得一个响应字符串 service.how 我可以将这个响应字符串带到我的 MainActivity 中吗来自 RegisterToServer class。我已经尝试过了,但无法得到任何 result.below 是我的代码 MainActivity.Java 和 RegisterToServer Class
MainActivity.Java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
T1 = (TextView)findViewById(R.id.textView1);
E1 = (EditText)findViewById(R.id.editText1);
b1 = (Button)findViewById(R.id.button1);
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String PlatNo = E1.getText().toString();
if (!PlatNo.equals("")){
RegisterToServer regServer= new RegisterToServer(null);
/*User userInfo= new User();*/
/* userInfo.setPlateNo(PlateNo);*/
regServer.execute(PlatNo);
Bundle extras = getIntent().getExtras();
if(extras!=null){
String RTS=extras.getString("RS");
E1.setText(RTS);
}
}else{
Toast.makeText( MainActivity.this, "Enter String", Toast.LENGTH_LONG).show();
}
}
});
}}
RegisterToServer.java
public class RegisterToServer extends AsyncTask<String, Void, Void> {
String SOAP_ACTION1 = "http://tempuri.org/GetRoadTax";
String NAMESPACE = "http://tempuri.org/";
String METHOD_NAME1 = "GetRoadTax";
String URL="http://192.168.0.102/RoadTax/WebService1.asmx";
private String TAG = "GetRoadTax";
String responseString;
String responseStatus = "SUCCESS";
Context context;
AsyncResponseListener responseListener;
public interface AsyncResponseListener {
public void onresponse(String status, String jsonData);
}
public RegisterToServer(Context c) {
responseListener = (AsyncResponseListener) c;
context = c;
}
@Override
protected Void doInBackground(String... params) {
Log.i(TAG, "doInBackground");
Log.i(TAG, params[0]);
RegToServer(params[0]);
return null;
}
@Override
protected void onPostExecute(Void result) {
Log.i(TAG, "onPostExecute");
}
@Override
protected void onPreExecute() {
Log.i(TAG, "onPreExecute");
// Display the progress bar
}
@Override
protected void onProgressUpdate(Void... values) {
Log.i(TAG, "onProgressUpdate");
}
private void RegToServer(String PlatNo) {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);
request.addProperty("PlatNo", PlatNo);
Log.i("TAG","Inside regtoserver before webservice call"+PlatNo);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try {
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION1, envelope);
Object response = (Object) envelope.getResponse();
responseString=response.toString();
Log.i("GET ROAD TAX", "Websevice called");
Log.i("Response String from WebService", responseString);
Intent intent=new Intent();
intent.putExtra("RS",responseString);
} catch (Exception e) {
e.printStackTrace();
responseString = e.toString();
Log.i("GET ROAD TAX", responseString);
}
}
您可以使用 LocalBroadcastReceiver。
在您的 Activity 的 OnResume 中注册广播并在 onPause 中取消注册。
您已经在 RegisterToServer
中创建了回调接口 AsyncResponseListener
。因此您需要通过在 Activity:
中实现 AsyncResponseListener
来更新 onresponse
方法中 EditText 中的响应
1. 在Activity中实现AsyncResponseListener
:
public class MainActivity extends Activity implement
RegisterToServer.AsyncResponseListener{
....
}
2. 在onresponse
方法中更新EditText中的文本:
@Override
public Void onresponse(String status,String jsonData) {
//update text here in E1
}
3. : 在 RegisterToServer
class 构造函数中传递 MainActivity.this
:
RegisterToServer regServer= new RegisterToServer(MainActivity.this);
4. 从 onPostExecute
:
调用 responseListener.onresponse
responseListener.onresponse("status".responseString)
在我的应用程序中,我习惯于通过编辑给出一个字符串值来调用网络服务 text.and 我可以从网络上获得一个响应字符串 service.how 我可以将这个响应字符串带到我的 MainActivity 中吗来自 RegisterToServer class。我已经尝试过了,但无法得到任何 result.below 是我的代码 MainActivity.Java 和 RegisterToServer Class
MainActivity.Java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
T1 = (TextView)findViewById(R.id.textView1);
E1 = (EditText)findViewById(R.id.editText1);
b1 = (Button)findViewById(R.id.button1);
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String PlatNo = E1.getText().toString();
if (!PlatNo.equals("")){
RegisterToServer regServer= new RegisterToServer(null);
/*User userInfo= new User();*/
/* userInfo.setPlateNo(PlateNo);*/
regServer.execute(PlatNo);
Bundle extras = getIntent().getExtras();
if(extras!=null){
String RTS=extras.getString("RS");
E1.setText(RTS);
}
}else{
Toast.makeText( MainActivity.this, "Enter String", Toast.LENGTH_LONG).show();
}
}
});
}}
RegisterToServer.java
public class RegisterToServer extends AsyncTask<String, Void, Void> {
String SOAP_ACTION1 = "http://tempuri.org/GetRoadTax";
String NAMESPACE = "http://tempuri.org/";
String METHOD_NAME1 = "GetRoadTax";
String URL="http://192.168.0.102/RoadTax/WebService1.asmx";
private String TAG = "GetRoadTax";
String responseString;
String responseStatus = "SUCCESS";
Context context;
AsyncResponseListener responseListener;
public interface AsyncResponseListener {
public void onresponse(String status, String jsonData);
}
public RegisterToServer(Context c) {
responseListener = (AsyncResponseListener) c;
context = c;
}
@Override
protected Void doInBackground(String... params) {
Log.i(TAG, "doInBackground");
Log.i(TAG, params[0]);
RegToServer(params[0]);
return null;
}
@Override
protected void onPostExecute(Void result) {
Log.i(TAG, "onPostExecute");
}
@Override
protected void onPreExecute() {
Log.i(TAG, "onPreExecute");
// Display the progress bar
}
@Override
protected void onProgressUpdate(Void... values) {
Log.i(TAG, "onProgressUpdate");
}
private void RegToServer(String PlatNo) {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);
request.addProperty("PlatNo", PlatNo);
Log.i("TAG","Inside regtoserver before webservice call"+PlatNo);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try {
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION1, envelope);
Object response = (Object) envelope.getResponse();
responseString=response.toString();
Log.i("GET ROAD TAX", "Websevice called");
Log.i("Response String from WebService", responseString);
Intent intent=new Intent();
intent.putExtra("RS",responseString);
} catch (Exception e) {
e.printStackTrace();
responseString = e.toString();
Log.i("GET ROAD TAX", responseString);
}
}
您可以使用 LocalBroadcastReceiver。
在您的 Activity 的 OnResume 中注册广播并在 onPause 中取消注册。
您已经在 RegisterToServer
中创建了回调接口 AsyncResponseListener
。因此您需要通过在 Activity:
AsyncResponseListener
来更新 onresponse
方法中 EditText 中的响应
1. 在Activity中实现AsyncResponseListener
:
public class MainActivity extends Activity implement
RegisterToServer.AsyncResponseListener{
....
}
2. 在onresponse
方法中更新EditText中的文本:
@Override
public Void onresponse(String status,String jsonData) {
//update text here in E1
}
3. : 在 RegisterToServer
class 构造函数中传递 MainActivity.this
:
RegisterToServer regServer= new RegisterToServer(MainActivity.this);
4. 从 onPostExecute
:
responseListener.onresponse
responseListener.onresponse("status".responseString)