android - 连接到网络服务

android - connect to web service

我正在尝试将 android 应用程序连接到上传到 somee 的 Web 服务。

我有以下问题:

致命异常:主要 java.lang.RuntimeException: 无法启动 activity ComponentInfo: java.lang.NullPointerException

网络服务代码:

[WebService(Namespace = "http://www.n-m.somee.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
    SqlConnection con = new SqlConnection(@"workstation id=WSDatabase.mssql.somee.com;packet size=4096;user id=***;pwd=***;data source=WSDatabase.mssql.somee.com;persist security info=False;initial catalog=WSDatabase ");
    [WebMethod]
    public string get_name(String pssw)
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("select username from users where pssw="+pssw, con);
        string rd =(string) cmd.ExecuteScalar();

        con.Close();
        return rd;
    }
}

我在清单文件中添加了以下行:

** MainActivity.java 文件**

public class MainActivity extends AppCompatActivity {

protected String namespace="http://www.n-m.somee.com/";
protected String url="http://www.n-m.somee.com/WebService1.asmx";
protected String SOAPAction="http://www.n-m.somee.com/get_name";
protected String method_name= "get_name";

TextView user_name;
@SuppressLint("NewApi")

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}


public void goButton(View v)
{
    user_name=(TextView)findViewById(R.id.textView1);
    //allow internet
    if(Build.VERSION.SDK_INT>9)
    {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }

    //create soap object
    SoapObject soapObject=new SoapObject(namespace,method_name);
    soapObject.addProperty("pssw", "1234");

    //create envelop
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(soapObject);

    //Rrquest get data from webservice and set it into soapobject

    HttpTransportSE transport = new HttpTransportSE(url);

    try {
        transport.call(SOAPAction, envelope);

        // get data
        SoapPrimitive output=(SoapPrimitive) envelope.getResponse();
        //set data into control
        user_name.setText("pssw: "+output.toString());

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

}
}

感谢任何帮助 谢谢

您的网址有点错误。这是我用的,

protected String namespace = "http://www.nourhan-m.somee.com/";
protected String url = "http://www.nourhan-m.somee.com/WebService1.asmx";
protected String SOAPAction = "http://www.nourhan-m.somee.com/get_name";
protected String method_name = "get_name";

我对您的代码进行了一些修改以使其工作。

public String callService(String username) {
    //create soap object and add params to it
    SoapObject request = new SoapObject(namespace, method_name);
    request.addProperty("pssw", username);

    //create envelop
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;

    //set request to envelope
    envelope.bodyOut = request;

    HttpTransportSE transport = new HttpTransportSE(url);
    transport.debug = true;
    try {
        transport.call(SOAPAction, envelope);
        Log.e("OUT", transport.requestDump);
        return transport.responseDump;
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (Exception e){
        e.printStackTrace();
    }
    return "";
}

我是这样调用方法的,

您可以按如下方式调用它,

final String username = (TextView) findViewById(R.id.textView1)

new Thread(new Runnable() {
    @Override
    public void run() {
        Log.e("OUT", callService(username));
    }
}).start();

我得到一个空的回复,可能是因为我没有提供有效的用户名。看看它。干杯:)