2017-11-05 29 views
0

のVisual Studio 2017のWebサービスとのAndroid Studioで拒否された許可、Visual Studioで "Clientes" テーブルとWebサービスASP.NETとSQLサーバー2017java.net.SocketExceptionが:私は、Android StudioでKSOAP2ライブラリを使用

私は「TareaWSConsulta」と「TareaWSEnviar」WebサービスのSOAPを呼び出すと

は、それが私にこの例外を返します。私は問題が何であるかを知らない

11-05 07:14:56.592 12155-12248/com.example.ruper.serviciosweb_soap_rest E/CONSULTA: java.net.SocketException: Permission denied 
11-05 07:15:10.878 12155-12172/com.example.ruper.serviciosweb_soap_rest E/ENVIAR: java.net.SocketException: Permission denied 

。 VISUAL STUDIOが正常に動作していて、インターネットのアクセス権を要求しています。同じ問題があります。ありがとう!

AndroidManifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.ruper.serviciosweb_soap_rest"> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <uses-permission android:name="android.permission.INTERNET"/> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

マイMainActivityクラス:

package com.example.ruper.serviciosweb_soap_rest; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.content.ContextCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 
import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.PropertyInfo; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapPrimitive; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.HttpTransportSE; 

public class MainActivity extends AppCompatActivity { 
    EditText etxtNombre, etxtTelefono; 
    Button btnEnviar, btnConsultar; 
    ListView lstClientes; 
    TextView tviewResultado; 


String NAMESPACE="ruperdevcoder"; 
String URL="http://10.0.2.2:51629/ServicioClientes.asmx"; 
String METHOD_NAME="NuevoClienteSimple"; 
String SOAP_ACTION="ruperdevcoder/NuevoClienteSimple"; 

private static final int MY_PERMISSIONS_REQUEST_INTERNET=1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    etxtNombre = (EditText)findViewById(R.id.etxtNombre); 
    etxtTelefono = (EditText)findViewById(R.id.etxtTelefono); 
    btnEnviar = (Button)findViewById(R.id.btnEnviar); 
    btnConsultar = (Button)findViewById(R.id.btnConsultar); 
    tviewResultado = (TextView)findViewById(R.id.tviewResultado); 
    lstClientes = (ListView)findViewById(R.id.lstClientes); 
    int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.INTERNET); 
    if(permissionCheck!= PackageManager.PERMISSION_GRANTED){ 
     if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.INTERNET)){ 
     }else{ 
      ActivityCompat.requestPermissions(this, new String[]{ 
        Manifest.permission.INTERNET 
      },MY_PERMISSIONS_REQUEST_INTERNET); 
     } 
    } 

    btnConsultar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      TareaWSConsulta tarea = new TareaWSConsulta(); 
      tarea.execute(); 
     } 
    }); 

    btnEnviar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      TareaWSEnviar tarea = new TareaWSEnviar(); 
      tarea.execute(etxtNombre.getText().toString(),etxtTelefono.getText().toString()); 
     } 
    }); 

} 
@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[],int[]grantResults){ 
    switch(requestCode){ 
     case MY_PERMISSIONS_REQUEST_INTERNET:{ 
      if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){ 
      }else{ 
      } 
      return; 
     } 

    } 
} 

private class TareaWSConsulta extends AsyncTask<String,Integer,Boolean> { 

    private Cliente[] listaClientes; 

    @Override 
    protected Boolean doInBackground(String... params) { 
     Boolean result=true; 

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.setOutputSoapObject(request); 

     HttpTransportSE transporte = new HttpTransportSE(URL); 


     try{ 
      transporte.call(SOAP_ACTION, envelope); 

      SoapObject resSoap=(SoapObject)envelope.getResponse(); 
      listaClientes = new Cliente[resSoap.getPropertyCount()]; 

      for(int i=0; i<listaClientes.length;i++){ 
       SoapObject ic = (SoapObject) resSoap.getProperty(i); 

       Cliente cli = new Cliente(); 
       cli.id=Integer.parseInt(ic.getProperty(0).toString()); 
       cli.nombre=ic.getProperty(1).toString(); 
       cli.telefono=Integer.parseInt(ic.getProperty(2).toString()); 
       listaClientes[i]=cli; 
      } 

     }catch(Exception e) { 
      Log.e("CONSULTA", e.toString()); 
      result = false; 
     } 
     return result; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 

     if(result){ 
      final String[] datos = new String[listaClientes.length]; 
      for(int i=0;i<listaClientes.length;i++){ 

       datos[i]=listaClientes[i].nombre; 
       ArrayAdapter<String> adaptador = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_list_item_1, datos); 

       lstClientes.setAdapter(adaptador); 
      } 
     }else{ 
      tviewResultado.setText("Error!"); 
     } 
    } 
} 
private class TareaWSEnviar extends AsyncTask<String,Integer,Boolean>{ 
    public TareaWSEnviar() { 
     super(); 
    } 

    @Override 
    protected Boolean doInBackground(String... params) { 
     boolean result=true; 

     String nombre= params[0]; 
     String telefono= params[1]; 

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     request.addProperty("nombre", nombre); 
     request.addProperty("telefono", telefono); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet=true; 
     envelope.setOutputSoapObject(request); 
     HttpTransportSE transporte = new HttpTransportSE(URL); 

     try{ 
      transporte.call(SOAP_ACTION, envelope); 
      SoapPrimitive resultado_xml= (SoapPrimitive)envelope.getResponse(); 
      String res=resultado_xml.toString(); 
      if(!res.equals(1)){ 
       result=false; 
      } 

     }catch(Exception e){ 
      Log.e("ENVIAR",e.toString()); 
      result = false; 
     } 
     return result; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     if(result){ 
      tviewResultado.setText("INSERTADO OK!"); 
     }else{ 
      tviewResultado.setText("ERROR!"); 
     } 
    } 
} 
} 
+0

許可を追加インターネット、

+0

間違った場所に追加しました。これを ' greenapps

+0

アップス...ありがとう! jaja、 "TareaWSConsulta"を実行すると次のエラーが発生する:java.io.IOException:HTTPリクエストが失敗した、HTTPステータス:400。NAMESPACE、URL、METHOD_NAME、SOAP_ACTIONが正しい。 – Carlos

答えて

0

は、HTTP、あなたのURLでHTTPSを使用しないようにしてください。あなたのurlに

、変更:

文字列のURL = "http://10.0.2.2:51629/ServicioClientes.asmx"。

へ:

文字列のURL = "https://10.0.2.2:51629/ServicioClientes.asmx"。

私にとってはうまくいきましたが、これが役に立ちます。

関連する問題