Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
630 views
in Technique[技术] by (71.8m points)

android - java.net.SocketException: Address family not supported by protocol

in android I am getting the following error:

NativeStart.main(String[]) line: not available [native method]

my code is trying to use webservices:

import java.io.IOException;

import android.app.Activity;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.*;
import android.content.Context;
import android.os.*;
import android.widget.TextView;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;


public class Project_InvokeServiceActivity extends Activity {
    /** Called when the activity is first created. */

     private static final String SOAP_ACTION = "http://tempuri.org/userg";

        private static final String METHOD_NAME = "userg";

        private static final String NAMESPACE = "http://tempuri.org/";
        private static final String URL = "https://amaman.NewService/Permissions.asmx";
       // TextView tv;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       // tv=(TextView)findViewById(R.id.text1);
       // call();

             TextView tv = new TextView(this);




                 SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
                 request.addProperty("username", "222222");

            request.addProperty("ID", "123");



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

            envelope.setOutputSoapObject(request);

            setContentView(tv);

            try { HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            tv.setText("t");

            ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getActiveNetworkInfo();

            if (netInfo != null && netInfo.isConnectedOrConnecting()) {
                tv.setText("connected"+netInfo.getExtraInfo());
            }
            else{
            tv.setText("not conn");
            }


            try{


                androidHttpTransport.call(SOAP_ACTION, envelope);

                tv.setText("t1");
            }catch(Exception e){
                //tv.setText(e.getClass().getName());
                }



           // tv.setText("inside2");


            Object result = (Object)envelope.getResponse();


    } catch (Exception e2) {
        // TODO Auto-generated catch block
        //e.printStackTrace();
        TextView tv5 = new TextView(this);
        //tv3.setText(e1.getMessage());
       // tv.setText(result.toString());

        tv5.setText("exception"+e2.getClass()+"xxx");
        setContentView(tv);
    }

           // tv.setText(result.toString());
          //  tv.setText("inside");

          //  setContentView(tv);




    }

my program is connecting to internet....but it is throwing exception in the line below:

androidHttpTransport.call(SOAP_ACTION, envelope);

and exception messege is NULL. All the parameter passed are correct.AndroidManifest.xml is also ok.

In Log Cat i am getting this exception: java.net.SocketException: Address family not supported by protocol

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Try adding this to your AndroidManifest.xml as well:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

You also need to catch this Exception:

 catch(SocketException ex)
       {
         Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage());
           ex.printStackTrace();
       }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...