2016-09-01 2 views
0

код класса веб-сервиса:Connect .net Webservice с Android

public class WebService { 

    String namespace = "http://www.webserviceX.NET/"; 
    private String url = "http://www.webservicex.net/ConvertWeight.asmx"; 

    String SOAP_ACTION; 
    SoapObject request = null, objMessages = null; 
    SoapSerializationEnvelope envelope; 
    AndroidHttpTransport androidHttpTransport; 

    WebService() { 
    } 
    protected void SetEnvelope() { 

     try { 

      // Creating SOAP envelope 
      envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

      //You can comment that line if your web service is not .NET one. 
      envelope.dotNet = true; 

      envelope.setOutputSoapObject(request); 
      androidHttpTransport = new AndroidHttpTransport(url); 
      androidHttpTransport.debug = true; 

     } catch (Exception e) { 
      System.out.println("Soap Exception---->>>" + e.toString()); 
     } 
    } 

    // MethodName variable is define for which webservice function will call 
    public String getConvertedWeight(String MethodName, String weight, 
            String fromUnit, String toUnit) 
    { 

     try { 
      SOAP_ACTION = namespace + MethodName; 

      //Adding values to request object 
      request = new SoapObject(namespace, MethodName); 

      //Adding Double value to request object 
      PropertyInfo weightProp =new PropertyInfo(); 
      weightProp.setName("Weight"); 
      weightProp.setValue(weight); 
      weightProp.setType(double.class); 
      request.addProperty(weightProp); 

      //Adding String value to request object 
      request.addProperty("FromUnit", "" + fromUnit); 
      request.addProperty("ToUnit", "" + toUnit); 

      SetEnvelope(); 

      try { 

       //SOAP calling webservice 
       androidHttpTransport.call(SOAP_ACTION, envelope); 

       //Got Webservice response 
       String result = envelope.getResponse().toString(); 

       return result; 

      } catch (Exception e) { 
       // TODO: handle exception 
       return e.toString(); 
      } 
     } catch (Exception e) { 
      // TODO: handle exception 
      return e.toString(); 
     } 
    } 
} 

Мой обновленный код активность:

public class CheckDNLoginActivity extends Activity { 

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

     final Button webserviceCallButton = (Button) findViewById(R.id.webservice); 
     final TextView webserviceResponse = (TextView) findViewById(R.id.webserviceResponse); 

     webserviceCallButton.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

       webserviceResponse.setText("Requesting to server ....."); 

       new ExecuteService().execute(); 

      } 
     }); 
    } 


    class ExecuteService extends AsyncTask<String, Void, String> { 

      @Override 
      protected String doInBackground(String... params) { 
       //Create Webservice class object 
       WebService com = new WebService(); 

       // Initialize variables 
       String weight = "18000"; 
       String fromUnit = "Grams"; 
       String toUnit = "Kilograms"; 

       //Call Webservice class method and pass values and get response 
       String aResponse = com.getConvertedWeight("ConvertWeight", weight, fromUnit, toUnit); 

       //Alert message to show webservice response 
       Toast.makeText(getApplicationContext(), weight+" Gram= "+aResponse+" Kilograms", 
         Toast.LENGTH_LONG).show(); 

       Log.i("AndroidExampleOutput", "----"+aResponse); 
       return aResponse; 
      } 

      @Override 
      protected void onPostExecute(String result) { 
       webserviceResponse.setText("Response : "+ result); 

      } 

      @Override 
      protected void onPreExecute() {} 
     } 
} 

Это мой обновленный LogCat. Когда я запускаю мое приложение я получил ошибку:,

FATAL EXCEPTION: main 
     Process: com.example.dell.piechart2, PID: 2762 
     java.lang.NullPointerException 
      at com.example.dell.piechart2.CheckDNLoginActivity$ExecuteService.onPostExecute(CheckDNLoginActivity.java:63) 
      at com.example.dell.piechart2.CheckDNLoginActivity$ExecuteService.onPostExecute(CheckDNLoginActivity.java:38) 
      at android.os.AsyncTask.finish(AsyncTask.java:632) 
      at android.os.AsyncTask.access$600(AsyncTask.java:177) 
      at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5017) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
      at dalvik.system.NativeStart.main(Native Method) 

В чем проблема? Пожалуйста, помогите мне. Я размещаю свой полный ловушка здесь. вы также можете проверить его. Спасибо заранее.

+0

Использование _AsyncTask_ – Piyush

+0

Это означает, что не делают дорогостоящую задачу на главном потоке, как сетевые операции. – Enzokie

+0

plzzz помогите мне, ребята, я пробую его от 3 до 4 дней. но я не получаю результат. кто-то plzz помогите мне –

ответ

0

Вы должны использовать класс Асинхронный задач, как показано ниже,

Сначала изменить кнопку кликните событие, ниже

webserviceCallButton.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

      webserviceResponse.setText("Requesting to server ....."); 

      new ExecuteService().execute(); 

     } 
    }); 

Теперь проверьте ниже всего кода активности

public class CheckDNLoginActivity extends Activity { 

     Button webserviceCallButton; 
     TextView webserviceResponse; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      webserviceCallButton = (Button) findViewById(R.id.webservice); 
      webserviceResponse = (TextView) findViewById(R.id.webserviceResponse); 

      webserviceCallButton.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 

        webserviceResponse.setText("Requesting to server ....."); 

        new ExecuteService().execute(); 

       } 
      }); 
     } 


    class ExecuteService extends AsyncTask<String, Void, String> { 

      @Override 
      protected String doInBackground(String... params) { 
       //Create Webservice class object 
       WebService com = new WebService(); 

       // Initialize variables 
       String weight = "18000"; 
       String fromUnit = "Grams"; 
       String toUnit = "Kilograms"; 

       //Call Webservice class method and pass values and get response 
       String aResponse = com.getConvertedWeight("ConvertWeight", weight, fromUnit, toUnit); 

       //Alert message to show webservice response 
       Toast.makeText(getApplicationContext(), weight+" Gram= "+aResponse+" Kilograms", 
        Toast.LENGTH_LONG).show(); 

       Log.i("AndroidExampleOutput", "----"+aResponse); 
       return aResponse; 
      } 

      @Override 
      protected void onPostExecute(String result) { 
       webserviceResponse.setText("Response : "+ result); 

      } 

      @Override 
      protected void onPreExecute() {} 
     } 
} 
+0

Ошибка в классе ExecuteService..не не может быть распознан этот метод –

+0

@ashisharma, где вы поместили класс ExecuteService? , Он должен быть внутри класса CheckDNLoginActivity, проверьте его – Vickyexpert

+0

. Я вставляю код ur внутри tOnClickListener, а затем никакой ошибки в коде. –

0

NetworkOnMainThreadException бросается, когда приложение пытается выполнить сетевую операцию в основном потоке.

Для выполнения сетевых операций вы можете использовать AsyncTask.

Это AsyncTask код,

private class MyNetworkTask extends AsyncTask<String, String, String>{ 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     webserviceResponse.setText("Requesting to server ....."); 
    } 

    @Override 
    protected String doInBackground(String... params) { 

     //Create Webservice class object 
     WebService com = new WebService(); 

     // Initialize variables 
     String weight = params[1]; 
     String fromUnit = params[2]; 
     String toUnit = params[3]; 

     //Call Webservice class method and pass values and get response 
     return com.getConvertedWeight(params[0], weight, fromUnit, toUnit); 
    } 

    @Override 
    protected void onPostExecute(String aResponse) { 
     webserviceResponse.setText("Response : "+aResponse); 
    } 
} 

Это, как вы называете AyncTask,

webserviceCallButton.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     new MyNetworkTask().execute("ConvertWeight", "18000", "Grams", "Kilograms"); 

    } 

}); 

См this SO нить для получения дополнительной информации.

+0

ошибка в MyNetworkTask () class..Это не вызывает этот метод. can not resolve symbol –

+0

ошибка в doinbackground method..java.lang.RuntimeException: не удается создать обработчик внутри потока, который не вызвал Looper.prepare() –

+0

да я использовал обновленный код. И когда я запустил его, эта ошибка возникла –

0

попробовать это

public class request extends AppCompatActivity { 
TextView webserviceResponse; 

String aResponse="nul"; 

String f_name=""; 

WebserviceCall com = new WebserviceCall(); 

Button webserviceCallButton; 

@Override 

    protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.request); 

    webserviceCallButton = (Button) findViewById(R.id.button); 
    webserviceResponse = (TextView) findViewById(R.id.textView); 

    webserviceCallButton.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      f_name = "1"; 

      new LongOperation().execute(""); 


     } 
    }); 

} 
private class LongOperation extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 


     //Create Webservice class object 

     // Initialize variables 

     //Call Webservice class method and pass values and get response 
     aResponse = com.getchange_liveserver("wb", f_name); 

     //Alert message to show webservice response 

     Log.i("AndroidExampleOutput", "----"+aResponse); 

     // webserviceResponse.setText("Executed"); // txt.setText(result); 
     // might want to change "executed" for the returned string passed 

     // into onPostExecute() but that is upto you 
     return "Executed"; 
    } 

    @Override 
    protected void onPostExecute(String result) { 


     webserviceResponse.setText("Response : "+aResponse); 


    } 









@Override 
    protected void onPreExecute() {    
    webserviceResponse.setText("Requesting to server ....."); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) {} 
} 

}

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