2016-03-24 8 views
0

Je suis essayer de connecter l'application Android à un service Web téléchargé sur somee.android - se connecter au service Web

J'ai le problème suivant:

FATAL EXCEPTION: principale java.lang.RuntimeException: Impossible de démarrer l'activité ComposantInfo: java.lang.NullPointerException

le code de service 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; 
    } 
} 

J'ai ajouté la ligne suivante au fichier manifeste:

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

} 
} 

Je vous remercie de toute aide vous remercier

+0

On dirait une erreur avec votre connexion à la base de données. –

+0

le problème résolu lorsque j'ai mis la chaîne de connexion dans web.config et que SOAPAction a été modifié en SOAPAction = "http://www.n-m.somee.com/get_name"; merci pour votre aide, mais maintenant l'erreur est: n'a pas réussi à se connecter à www.nm.somee.com/208.94.246.108 (port 80) après 20000ms –

Répondre

1

Vos urls étaient un peu mal. C'est ce que j'ai utilisé,

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"; 

J'ai fait quelques modifications à votre code pour le faire fonctionner.

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 ""; 
} 

Voilà comment j'invoquais la méthode,

Vous pouvez l'appeler comme suit,

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

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

Je suis une réponse vide, peut-être parce que je ne donne pas un nom d'utilisateur valide . Regardez-le. Salutations :)

+0

merci pour votre aide., mais votre code ou mon code après modification retour null Je ne sais pas pourquoi, j'ai essayé la requête sql du service Web sur l'hôte Web et il renvoie la valeur –

+0

@nm Pouvez-vous me donner un nom d'utilisateur que vous avez essayé? –

+0

le service web prend pssw et retourne le nom d'utilisateur try "1234" –