请问有谁做过吗?我在网上找了好多例子,但是转到自己的电脑上总是有问题,实在搞不懂为什么,请教大家package webservice.weather;import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;public class WeatherActivity extends Activity {
private static String LOG_TAG = "Weather";
private static boolean DEBUG = false;
private static final int SHOW_ABOUT = 0x0001;
private static final String NAMESPACE = "http://WebXml.com.cn/"; private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx";
private static final String METHOD_NAME = "getWeatherbyCityName";
private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName"; private String weatherToday;
private String weatherTomorrow;
private String weatherAfterday;
private String weatherCurrent;
private int iconToday[] = new int[2];
private int iconTomorrow[] = new int[2];
private int iconAfterday[] = new int[2]; private Button okButton;
private EditText textInput;
private ImageView imageView1;
private ImageView imageView2;
private TextView textWeatherToday;
private ImageView imageView3;
private ImageView imageView4;
private TextView textWeatherTomorrow;
private ImageView imageView5;
private ImageView imageView6;
private TextView textWeatherAfterday;
private TextView textWeatherCurrent; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); okButton = (Button) findViewById(R.id.WeatherSearch);
textInput = (EditText) findViewById(R.id.TextWeather);
imageView1 = (ImageView) findViewById(R.id.ImageView01);
imageView2 = (ImageView) findViewById(R.id.ImageView02);
textWeatherToday = (TextView) findViewById(R.id.WeatherToday);
imageView3 = (ImageView) findViewById(R.id.ImageView03);
imageView4 = (ImageView) findViewById(R.id.ImageView04);
textWeatherTomorrow = (TextView) findViewById(R.id.WeatherTomorrow);
imageView5 = (ImageView) findViewById(R.id.ImageView05);
imageView6 = (ImageView) findViewById(R.id.ImageView06);
textWeatherAfterday = (TextView) findViewById(R.id.WeatherAfterday);
textWeatherCurrent = (TextView) findViewById(R.id.WeatherCurrent); okButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
showWeather();
}
});
} private void showWeather() {
String city = textInput.getText().toString();
if (city.length() == 0)
city = "杭州";
getWeather(city); textWeatherToday.setText(getWeatherToday());
imageView1.setImageResource(getIconToday(0));
imageView2.setImageResource(getIconToday(1)); textWeatherTomorrow.setText(getWeatherTomorrow());
imageView3.setImageResource(getIconTomorrow(0));
imageView4.setImageResource(getIconTomorrow(1)); textWeatherAfterday.setText(getWeatherAfterday());
imageView5.setImageResource(getIconAfterday(0));
imageView6.setImageResource(getIconAfterday(1)); textWeatherCurrent.setText(getWeatherCurrent());
} public void getWeather(String cityName) {
try {
SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME);
rpc.addProperty("theCityName", cityName); AndroidHttpTransport ht = new AndroidHttpTransport(URL);
ht.debug = true; SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11); envelope.bodyOut = rpc;
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc); ht.call(SOAP_ACTION, envelope); debug(LOG_TAG, "DUMP>> " + ht.requestDump);
debug(LOG_TAG, "DUMP<< " + ht.responseDump); SoapObject result = (SoapObject) envelope.bodyIn;
SoapObject detail = (SoapObject) result
.getProperty("getWeatherbyCityNameResult"); parseWeather(detail);
return;
} catch (Exception e) {
e.printStackTrace();
}
} private void parseWeather(SoapObject detail) {
String date = detail.getProperty(6).toString();
weatherToday = "今天:" + date.split(" ")[0];
weatherToday = weatherToday + "\n天气:" + date.split(" ")[1];
weatherToday = weatherToday + "\n气温:"
+ detail.getProperty(5).toString();
weatherToday = weatherToday + "\n风力:"
+ detail.getProperty(7).toString() + "\n";
iconToday[0] = parseIcon(detail.getProperty(8).toString());
iconToday[1] = parseIcon(detail.getProperty(9).toString()); weatherCurrent = detail.getProperty(10).toString(); date = detail.getProperty(13).toString();
weatherTomorrow = "明天:" + date.split(" ")[0];
weatherTomorrow = weatherTomorrow + "\n天气:" + date.split(" ")[1];
weatherTomorrow = weatherTomorrow + "\n气温:"
+ detail.getProperty(12).toString();
weatherTomorrow = weatherTomorrow + "\n风力:"
+ detail.getProperty(14).toString() + "\n";
iconTomorrow[0] = parseIcon(detail.getProperty(15).toString());
iconTomorrow[1] = parseIcon(detail.getProperty(16).toString()); date = detail.getProperty(18).toString();
weatherAfterday = "后天:" + date.split(" ")[0];
weatherAfterday = weatherAfterday + "\n天气:" + date.split(" ")[1];
weatherAfterday = weatherAfterday + "\n气温:"
+ detail.getProperty(17).toString();
weatherAfterday = weatherAfterday + "\n风力:"
+ detail.getProperty(19).toString() + "\n";
iconAfterday[0] = parseIcon(detail.getProperty(20).toString());
iconAfterday[1] = parseIcon(detail.getProperty(21).toString());
} public String getWeatherToday() {
debug(LOG_TAG, "weatherToday: " + weatherToday);
return weatherToday;
} public String getWeatherTomorrow() {
debug(LOG_TAG, "weatherTomorrow: " + weatherTomorrow);
return weatherTomorrow;
} public String getWeatherAfterday() {
debug(LOG_TAG, "weatherAfterday: " + weatherAfterday);
return weatherAfterday;
} public String getWeatherCurrent() {
debug(LOG_TAG, "weatherCurrent: " + weatherCurrent);
return weatherCurrent;
} public int getIconToday(int index) {
return iconToday[index];
} public int getIconTomorrow(int index) {
return iconTomorrow[index];
} public int getIconAfterday(int index) {
return iconAfterday[index];
} private int parseIcon(String strIcon) {
if (strIcon == null)
return -1; if ("0.gif".equals(strIcon))
return R.drawable.a_0;
if ("1.gif".equals(strIcon))
return R.drawable.a_1;
if ("2.gif".equals(strIcon))
return R.drawable.a_2;
if ("3.gif".equals(strIcon))
return R.drawable.a_3;
if ("4.gif".equals(strIcon))
return R.drawable.a_4;
if ("5.gif".equals(strIcon))
return R.drawable.a_5;
if ("6.gif".equals(strIcon))
return R.drawable.a_6;
if ("7.gif".equals(strIcon))
return R.drawable.a_7;
if ("8.gif".equals(strIcon))
return R.drawable.a_8;
if ("9.gif".equals(strIcon))
return R.drawable.a_9;
if ("10.gif".equals(strIcon))
return R.drawable.a_10;
if ("11.gif".equals(strIcon))
return R.drawable.a_11;
if ("12.gif".equals(strIcon))
return R.drawable.a_12;
if ("13.gif".equals(strIcon))
return R.drawable.a_13;
if ("14.gif".equals(strIcon))
return R.drawable.a_14;
if ("15.gif".equals(strIcon))
return R.drawable.a_15;
if ("16.gif".equals(strIcon))
return R.drawable.a_16;
if ("17.gif".equals(strIcon))
return R.drawable.a_17;
if ("18.gif".equals(strIcon))
return R.drawable.a_18;
if ("19.gif".equals(strIcon))
return R.drawable.a_19;
if ("20.gif".equals(strIcon))
return R.drawable.a_20;
if ("21.gif".equals(strIcon))
return R.drawable.a_21;
if ("22.gif".equals(strIcon))
return R.drawable.a_22;
if ("23.gif".equals(strIcon))
return R.drawable.a_23;
if ("24.gif".equals(strIcon))
return R.drawable.a_24;
if ("25.gif".equals(strIcon))
return R.drawable.a_25;
if ("26.gif".equals(strIcon))
return R.drawable.a_26;
if ("27.gif".equals(strIcon))
return R.drawable.a_27;
if ("28.gif".equals(strIcon))
return R.drawable.a_28;
if ("29.gif".equals(strIcon))
return R.drawable.a_29;
if ("30.gif".equals(strIcon))
return R.drawable.a_30;
if ("31.gif".equals(strIcon))
return R.drawable.a_31; return 0;
} private static void debug(String tag, String msg) {
if (DEBUG)
Log.d(tag, msg);
} private void showAbout() {
TextView textAbout = new TextView(this);
textAbout.setText(R.string.about_text);
textAbout.setMovementMethod(LinkMovementMethod.getInstance()); Dialog dlg = new AlertDialog.Builder(this)
.setTitle(R.string.app_about)
.setView(textAbout)
.setPositiveButton(R.string.about_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
}).create();
dlg.show();
} public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, SHOW_ABOUT, 0, R.string.app_about);
return true; } public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case SHOW_ABOUT:
showAbout();
return true;
}
return false;
}
}代码中的红色部分抛出异常,请问为什么啊?

解决方案 »

  1.   


    ERROR/AndroidRuntime(600): java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject
               at webservice.weather.WeatherActivity.getWeather(WeatherActivity.java:104)
               at webservice.weather.WeatherActivity.showWeather(WeatherActivity.java:84)
               at webservice.weather.WeatherActivity.access$0(WeatherActivity.java:80)
               at webservice.weather.WeatherActivity$1.onClick(WeatherActivity.java:75)
               at android.view.View.performClick(View.java:2408)
               at android.view.View$PerformClick.run(View.java:8816)
               at android.os.Handler.handleCallback(Handler.java:587)
               at android.os.Handler.dispatchMessage(Handler.java:92)
               at android.os.Looper.loop(Looper.java:123)
               at android.app.ActivityThread.main(ActivityThread.java:4627)
               at java.lang.reflect.Method.invokeNative(Native Method)
              at java.lang.reflect.Method.invoke(Method.java:521)
              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
              at dalvik.system.NativeStart.main(Native Method)
      

  2.   

    这个问题已经解决了,是jar包导入的问题。
      

  3.   

    04-07 07:01:24.313: ERROR/AndroidRuntime(242): java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at com.saye.config.Init.serviceRequest(Init.java:77)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at com.saye.handler.LoginInput$1.onClick(LoginInput.java:67)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.view.View.performClick(View.java:2364)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.view.View.onTouchEvent(View.java:4179)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.widget.TextView.onTouchEvent(TextView.java:6541)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.view.View.dispatchTouchEvent(View.java:3709)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.os.Handler.dispatchMessage(Handler.java:99)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.os.Looper.loop(Looper.java:123)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at android.app.ActivityThread.main(ActivityThread.java:4363)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at java.lang.reflect.Method.invokeNative(Native Method)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at java.lang.reflect.Method.invoke(Method.java:521)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    04-07 07:01:24.313: ERROR/AndroidRuntime(242):     at dalvik.system.NativeStart.main(Native Method)
      

  4.   

    lz能说的具体点么,遇到同样的Error了
      

  5.   

    谷歌里找ksoap2-android-assembly-2.4-jar-with-dependencies.jar这个架包,然后加进去就行了
      

  6.   

    jar包导入方式的问题?还是jar包版本的问题,我直接在eclipse中通过build path导入的,但是还是出先lz的问题。
      

  7.   

    话说我也是导入的外部包,也出现了这个问题,最新版的ksoap2;不会是jar包版本的问题吧
      

  8.   

    下了个老版本的2.4的jar包,同样的导入,编译运行就没有问题了...
      

  9.   

    http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.6.0/ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar这个网址下载下来的ksoap2包由于安全问题吧jar包的后缀改成了zip格式,但Eclipse导入包的时候认zip包,我就没改,最后就出现的楼上的问题;上面我也说了以为是版本的问题,下了个老版本的jar包回来,这回事真的jar格式的,好用了;然后我测试了下把下回来的新版本的zip包改回jar格式,再导入,测试通过;
    总结:导入包的时候一定要把zip格式的改回jar格式再导入,要不然应用程序不认
      

  10.   

    我用的ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar这个版本,出现了同样的问题,如何解决啊,急急急