如何解决Android中的这个错误?java.net.MalformedURLException:找不到协议:

12

我不知道问题出在哪里,但我收到了这样的错误提示:

即使我检查了所有路径,也确认它们都是正确的,但仍然会出现错误。

java.net.MalformedURLException: Protocol not found: www.w3schools.com/webservices/tempconvert.asmx

我的代码:

package com.example.mytest;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;

@SuppressWarnings("deprecation")
public class MainActivity extends Activity {

    private final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit";
    private final String METHOD_NAME = "CelsiusToFahrenheit";
    public final String NAMESPACE = "http://tempuri.org";
    public String URL = "www.w3schools.com/webservices/tempconvert.asmx";

    TextView tv;

    public static String TAG = "MyTest";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.d(TAG, "MainActivity Started");
        tv = (TextView) findViewById(R.id.txt1);

        SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
        Request.addProperty("Celsius", "32");

        // URL=URL.replaceAll(" ", "%20");

        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(Request);

        Log.d(TAG, "URL:"+URL);

        AndroidHttpTransport aht = new AndroidHttpTransport(URL);

        try {
            // HttpTransportSE aht = new HttpTransportSE(URL);

            Log.d(TAG, "aht:" + aht);

            aht.call(SOAP_ACTION, soapEnvelope);
            SoapPrimitive resultString = (SoapPrimitive) soapEnvelope
                    .getResponse();

            // Object resultString = (Object)soapEnvelope.getResponse();

            Log.d(TAG, "result String=" + resultString);

            tv.setText("Status: " + resultString);
        } catch (Exception e) {
            Log.d(TAG, "Error: ", e);
        }

    }

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

}

我不知道确切的问题是什么,但是我遇到了以下错误:

02-01 21:07:01.264: D/MyTest(1068): MainActivity Started
02-01 21:07:01.534: D/MyTest(1068): Error: 
02-01 21:07:01.534: D/MyTest(1068): java.net.MalformedURLException: Protocol not found: www.w3schools.com/webservices/tempconvert.asmx
02-01 21:07:01.534: D/MyTest(1068):     at java.net.URL.<init>(URL.java:275)
02-01 21:07:01.534: D/MyTest(1068):     at java.net.URL.<init>(URL.java:159)
02-01 21:07:01.534: D/MyTest(1068):     at org.ksoap2.transport.ServiceConnectionSE.<init>(ServiceConnectionSE.java:65)
02-01 21:07:01.534: D/MyTest(1068):     at org.ksoap2.transport.ServiceConnectionSE.<init>(ServiceConnectionSE.java:61)
02-01 21:07:01.534: D/MyTest(1068):     at org.ksoap2.transport.AndroidServiceConnection.<init>(AndroidServiceConnection.java:27)
02-01 21:07:01.534: D/MyTest(1068):     at org.ksoap2.transport.AndroidHttpTransport.getServiceConnection(AndroidHttpTransport.java:35)
02-01 21:07:01.534: D/MyTest(1068):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:124)
02-01 21:07:01.534: D/MyTest(1068):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
2个回答

31

www... 前面添加 http:// 或者 https://

public String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";

我已经完成了新的更正,但现在出现了新的错误,java.io.IOException: 主机名<www.w3schools.com>未经验证。 - Ganesh Katikar
@GaneshKatikar - 在提问之前,请先检查是否已经有人提出并回答了相同的问题。 - Stephen C
我正在更正这些更改,但现在出现了新的错误,如下:SoapFault - faultcode: 'soap:Client' faultstring: '服务器未能识别HTTP标头SOAPAction的值:tempuri.org/CelsiusToFahrenheit。'; faultactor: 'null' detail: 现在有任何解决方案吗? - Ganesh Katikar
我有一个像这样的http://182.12.23,遇到了这个问题。 - CoronaPintu
但是我正在使用代理。 - themhz

2

您错过了协议http://

public String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";

注意:
如果您只需要将摄氏度转换为华氏度或者反之,可以尝试以下方法:

function C2F ( C ) {
var F = eval ((C x 9 / 5) +32)
return ( F ); }

function F2C ( F ) {
var C = eval ( F - 32 ) * 5 / 9;
return ( C ); } 

我正在更正这些更改,但现在出现了新的错误,如下:SoapFault - faultcode: 'soap:Client' faultstring: '服务器未能识别HTTP标头SOAPAction的值:http://tempuri.org/CelsiusToFahrenheit。' faultactor: 'null' detail: - Ganesh Katikar
你使用的是 tempuri.org 主机还是仅仅是一个例子? - Pedro Lobito
1
实际上我根本不需要公式,我只想调用那个 Web 服务来显示输出。 - Ganesh Katikar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接