2016-03-24 3 views
0

Я пытаюсь подключить приложение Android к веб-сервису, загруженному на некоторых.android - подключиться к веб-сервису

У меня есть следующая проблема:

FATAL ИСКЛЮЧЕНИЕ: главный java.lang.RuntimeException: Невозможно начать деятельность 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(); 
    } 

} 
} 

Я признателен за любую помощь поблагодарить вас

+0

Похоже на ошибку при подключении к базе данных. –

+0

проблема решена, когда я вставил строку подключения в web.config и изменил SOAPAction на SOAPAction = "http://www.n-m.somee.com/get_name"; Спасибо за помощь, но вот ошибка: не удалось подключиться к www.nm.somee.com/208.94.246.108 (порт 80) после 20000ms –

ответ

1

Ваши URLs были немного неправильно. Это то, что я использовал,

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

Я получил пустой ответ, может быть, это потому, что я не дал правильное имя пользователя , Посмотри на это. Cheers :)

+0

благодарю вас за помощь., , но ваш код или мой код после модификации возвращаются null Я не знаю, почему, я попробовал sql-запрос веб-службы на веб-хостинге, и он возвращает значение –

+0

@nm Можете ли вы дать мне имя пользователя, которое вы пробовали? –

+0

веб-сервис принимает pssw и возвращает имя пользователя try «1234» –

 Смежные вопросы

  • Нет связанных вопросов^_^