为什么ksoap2无法正常工作?

时间:2015-08-12 08:39:12

标签: android soap ksoap2 android-ksoap2

我是初学Android开发人员,正在使用网络服务。 我不是什么主要问题!我的代码或这个KSoaP的东西都有问题!

我没有得到结果

这是活动类

package com.stc.nationalholidays;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

import org.ksoap2.transport.HttpTransportSE;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;

public class Holiday extends Activity {

// http://localhost:34983/WebServiceHoliday.asmx?op=GetAboutData
private final String NAMESPACE = "http://localhost/";
private final String URL = "http://localhost:34983/WebServiceHoliday.asmx?WSDL";
private final String SOAP_ACTION = "http://localhost/GetHolidayData";
private final String METHOD_NAME = "GetHolidayData";
private String HOLIDAYS, ISO_CODE;
private TextView result;

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle obj) {
    super.onCreate(obj);
    setContentView(R.layout.activity_holiday);

    result = (TextView) findViewById(R.id.holidays);
    result.setText(" ");

    final Intent intent = getIntent();

    String name = intent.getStringExtra("Data");
    String ini = name.trim(); // Data with no space character
    String code = ini.substring(0, 2); // ISO Code of the country

    ISO_CODE = code;

    // Toast.makeText(getBaseContext(), code, Toast.LENGTH_LONG).show();

    if (isOnline()) {

        AsyncCallWS task = new AsyncCallWS();
        task.execute();

        Toast.makeText(getBaseContext(),
                "Processing your request!!!\nPlease wait...",
                Toast.LENGTH_SHORT).show();
        result.setText(HOLIDAYS);

    } else {
        try {
            AlertDialog alertDialog = new AlertDialog.Builder(
                    getBaseContext()).create();

            alertDialog.setTitle("Info");
            alertDialog
                    .setMessage("No internet connection.\nPlease check your internet connectivity and click OK.");
            alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
            alertDialog.setButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int which) {
                            finish();
                            startActivity(intent);

                        }
                    });

            alertDialog.show();
        } catch (Exception e) {
            // Log.d(Constants.TAG, "Show Dialog: " + e.getMessage());
        }
    }
}

public boolean isOnline() {
    ConnectivityManager conMgr = (ConnectivityManager) getApplicationContext()
            .getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = conMgr.getActiveNetworkInfo();

    if (netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()) {
        Toast.makeText(getBaseContext(), "No Internet connection!",
                Toast.LENGTH_LONG).show();
        return false;
    }
    return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.holiday, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    switch (id) {
    case R.id.action_help:

        break;

    case R.id.action_about:

        break;

    case R.id.action_exit:
        exitByBackKey();
        break;
    }
    return super.onOptionsItemSelected(item);
}

/*
 * public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode ==
 * KeyEvent.KEYCODE_BACK) { exitByBackKey();
 * 
 * //moveTaskToBack(false);
 * 
 * return true; } return super.onKeyDown(keyCode, event); }
 */

@SuppressWarnings("unused")
protected void exitByBackKey() {

    AlertDialog alertbox = new AlertDialog.Builder(this)
            .setMessage("Are you sure want to exit?")
            .setPositiveButton("Yes",
                    new DialogInterface.OnClickListener() {

                        // do something when the button is clicked
                        public void onClick(DialogInterface arg0, int arg1) {

                            Toast.makeText(
                                    getBaseContext(),
                                    "We would love to see you again!\nHave a joyful day. :)",
                                    Toast.LENGTH_LONG).show();

                            finish();
                            // close();

                        }
                    })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {

                // do something when the button is clicked
                public void onClick(DialogInterface arg0, int arg1) {
                }
            }).show();

}

public void getHolidayData(String iso) {
    try {
        // Create request
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        // Property which holds input parameters
        PropertyInfo holiday = new PropertyInfo();
        // Set Name
        holiday.setName(iso);
        // Set Value
        holiday.setValue(iso);
        // Set dataType
        holiday.setType(String.class);
        // Add the property to request object
        request.addProperty(holiday);
        // Create envelope
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.encodingStyle = SoapEnvelope.ENC;
        envelope.setAddAdornments(false);
        envelope.implicitTypes = false;
        // Set output SOAP object
        envelope.setOutputSoapObject(request);
        // Create HTTP call object
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

        // Invoke web service
        androidHttpTransport.call(SOAP_ACTION, envelope);
        // Get the response
        SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
        // Assign it to "HOLIDAYS" variable
        Toast.makeText(getBaseContext(), "Result: " + response.toString(),
                Toast.LENGTH_LONG).show();

        HOLIDAYS = response.toString();
        result.setText(HOLIDAYS);

    } catch (Exception e) {
        result.setText(e.toString());
        // e.printStackTrace();
    }
}

private class AsyncCallWS extends AsyncTask<String, Void, Void> {
    @Override
    protected Void doInBackground(String... params) {
        // Log.i(TAG, "doInBackground");
        try {
            getHolidayData(ISO_CODE);
        } catch (Exception e) {
            result.setText(e.toString());
            //e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result1) {
        // Log.i(TAG, "onPostExecute");
        // String currencyResult = res + " " +to.toString();
        result.setText(HOLIDAYS);
    }

    @Override
    protected void onPreExecute() {
        // Log.i(TAG, "onPreExecute");
        result.setText("Fetching Data...");
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        // Log.i(TAG, "onProgressUpdate");
        result.setText("Updating Results...");
    }

}
}

我在清单文件中拥有所有必需的权限。 Web服务一切正常。

请帮我解决这个问题,或者我已经完成了android!

1 个答案:

答案 0 :(得分:1)

您必须确保可以从您正在测试的设备/模拟器中访问您使用的Web服务的URL。这需要是主机名或IP地址。 localhost将无法正常工作,因为它指向手机/设备本身......