2016-03-24 206 views
0

我试图将android应用程序连接到上传到某个web服务上。android - 连接到web服务

我有以下问题:

致命异常:主要 了java.lang.RuntimeException:无法启动活动ComponentInfo:显示java.lang.NullPointerException

Web服务代码:

[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(); 
    } 

} 
} 

我感谢所有帮助 谢谢

+0

似乎与您的数据库连接有一些错误。 –

+0

当我将连接字符串放入web.config并将SOAPAction更改为SOAPAction =“http://www.n-m.somee.com/get_name”; 感谢您的帮助,但现在的错误是:20000ms后无法连接到www.nm.somee.com/208.94.246.108(端口80) –

回答

1

您的网址是有点不对劲。这是我用过的,

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(); 

我有一个空的反应,也许是因为我没有给一个有效的用户名。看看它。欢呼:)

+0

感谢您的帮助。, 但您的代码或修改后的代码返回null 我不知道为什么,我试着在web主机上的web服务sql查询,它返回值 –

+0

@ nm你可以给我一个你试过的用户名吗? –

+0

网络服务采取pssw并返回用户名 尝试“1234” –