【发布时间】:2018-03-09 15:55:38
【问题描述】:
我对编程相当陌生,刚开始在 Microsoft Visual Studio 2017 中使用 ASP.NET C# 使用 WebService。我还将 KSoap2 下载到 Android Studio 中,并计划通过 WebService 将用户数据插入 SQL Server DB。然而,什么也没发生。如果你们都可以看看我的代码并就哪里出了问题给我反馈,那就太好了。谢谢大家!!
这是我的 ASP.NET WebService 代码:
[WebMethod]
public Boolean InsertUser(string firstName, string lastName, string email, string password)
{
SqlConnection conn = ConnectionManager.GetConnection();
conn.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO dbo.UserData(firstName, lastName, email, password) VALUES('" + firstName + "', '" + lastName + "', '" + email + "', '" + password + "')", conn);
cmd.ExecuteNonQuery();
conn.Close();
return true;
}
这是我在 Android Studio 中的代码:
public class TestCreateAcc extends AppCompatActivity {
TextView tvS;
EditText etFN, etLN, etE, etP, etCP;
Button btnSub;
String firstName, lastName, email, password, confirmPwd;
String displayText;
private static final String SOAP_ACTION = "http://tempuri.org/InsertUser";
private static final String OPERATION_NAME = "InsertUser";
private static final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
private static final String SOAP_ADDRESS = "http://10.0.1.86:53877/Service.asmx";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_create_acc);
tvS = (TextView) findViewById(R.id.tvS);
btnSub = (Button) findViewById(R.id.btnSub);
btnSub.setOnClickListener( new OnClickListener(){
public void onClick(View v)
{
etFN = (EditText) findViewById(R.id.etFN);
etLN = (EditText) findViewById(R.id.etLN);
etE = (EditText) findViewById(R.id.etE);
etP = (EditText) findViewById(R.id.etP);
etCP = (EditText) findViewById(R.id.etCP);
firstName = etFN.getText().toString().trim();
lastName = etLN.getText().toString().trim();
email = etE.getText().toString().trim();
password = etP.getText().toString().trim();
confirmPwd = etCP.getText().toString().trim();
if(firstName.isEmpty() && lastName.isEmpty() && email.isEmpty() && password.isEmpty() && confirmPwd.isEmpty())
{
tvS.setVisibility(View.VISIBLE);
tvS.setText("Fields cannot be left empty!!!");
tvS.setTextColor(Color.parseColor("#FF0000"));
}
else if(!confirmPwd.equals(password))
{
tvS.setVisibility(View.VISIBLE);
tvS.setText("Passwords do not match!!!");
tvS.setTextColor(Color.parseColor("#FF0000"));
}
else
{
AsyncCallWS task = new AsyncCallWS();
task.execute();
}
}
});
}
class AsyncCallWS extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute(){
tvS.setVisibility(View.INVISIBLE);
}
@Override
protected String doInBackground(String... params){
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME);
PropertyInfo FirstName = new PropertyInfo();
FirstName.setName("firstName");
FirstName.setValue(params[0]);
FirstName.setType(String.class);
PropertyInfo LastName = new PropertyInfo();
LastName.setName("lastName");
LastName.setValue(params[1]);
LastName.setType(String.class);
PropertyInfo Email = new PropertyInfo();
Email.setName("email");
Email.setValue(params[2]);
Email.setType(String.class);
PropertyInfo Password = new PropertyInfo();
Password.setName("password");
Password.setValue(params[3]);
Password.setType(String.class);
request.addProperty(FirstName);
request.addProperty(LastName);
request.addProperty(Email);
request.addProperty(Password);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(SOAP_ADDRESS);
httpTransport.debug = true;
try{
httpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
String res = response.toString() + "\n";
res += httpTransport.requestDump + "\n" + httpTransport.responseDump;
return res;
}catch(Exception ex){
return ex.toString();
}
}
@Override
protected void onProgressUpdate(String... values){
}
@Override
protected void onPostExecute(String result){
super.onPostExecute(result);
tvS.setVisibility(View.VISIBLE);
displayText = "Success!!";
tvS.setTextColor(Color.parseColor("#00FF00"));
tvS.setText(displayText);
Intent register = new Intent(TestCreateAcc.this, DriverLicenseActivity.class);
startActivity(register);
}
}
谢谢!! :)
编辑:我正在使用实际的 Android 设备,这些是我遇到的错误:
org.apache.http.conn.HttpHostConnectException:与http://mobilesystemservice.com 的连接被拒绝 返回数据不能为空! java.lang.ArrayIndexOutOfBoundsException:长度=0;索引=1
【问题讨论】:
-
有什么错误吗?如果你可以指定,那么它会很容易解决......
-
啊谢谢,我会加进去的:)
-
您在哪里遇到此错误?在调用服务之前?
-
@JericCruz 在我的手机上运行应用程序后,我填写了用户信息,当我点击提交按钮时......
-
@Justin456 你在哪里得到你的
paramsdoInBackground方法?
标签: c# android asp.net sql-server web-services