【问题标题】:why my app crash when i try to post some data into web service?为什么当我尝试将一些数据发布到 Web 服务时我的应用程序崩溃?
【发布时间】:2014-04-22 13:11:45
【问题描述】:

我正在做的是我试图从我的活动中发送一些字符串并发布到网络服务..我的代码是这样的:

approve.setOnClickListener(new OnClickListener() {

            @SuppressWarnings("unchecked")
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
//              Intent intent=new Intent(Info.this,MainActivity.class);

                 status="1";
                 ordernumber="25";
                 userid="11";
                 //Create instance for AsyncCallWS
                AsyncCallWS task = new AsyncCallWS();
                //Call execute 
                task.execute();
            }   
        });

     private class AsyncCallWS extends AsyncTask {

        @Override
        protected Object doInBackground(Object... params) {
            // TODO Auto-generated method stub

                loginStatus = WebService.invokeLoginWS(status,ordernumber,userid,"GetOrderData");
                return null;
            }

            protected void onPostExecute(Void result) {
                //Make Progress Bar invisible
                webservicePG.setVisibility(View.INVISIBLE);
                Intent intObj = new Intent(Info.this,PenddingOrders.class);
                //Error status is false
            }


            //Make Progress Bar visible
            protected void onPreExecute() {
                webservicePG.setVisibility(View.VISIBLE);
            }


        } 

这是我的网络服务类:

package post;


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 WebService {
    //Namespace of the Webservice - can be found in WSDL
    private static String NAMESPACE = "http://service.programmerguru.com/";
    //Webservice URL - WSDL File location    
    private static String URL = "http://192.168.1.113/testOrder/OrderAndroid.asmx";//Make sure you changed IP address
    //SOAP Action URI again Namespace + Web method name
    private static String SOAP_ACTION = "http://service.programmerguru.com/";

    public static boolean invokeLoginWS(String status,String orderid,String username, String webMethName) {
        boolean loginStatus = false;
        // Create request
        SoapObject request = new SoapObject(NAMESPACE, webMethName);
        // Property which holds input parameters
        PropertyInfo statusPI = new PropertyInfo();
        PropertyInfo orderidPI = new PropertyInfo();
        PropertyInfo usernamePI = new PropertyInfo();
        // Set Username
        statusPI.setName("status");
        // Set Value
        statusPI.setValue(status);
        // Set dataType
        statusPI.setType(String.class);
        // Add the property to request object
        request.addProperty(statusPI);
        //Set Password
        orderidPI.setName("orderid");
        //Set dataType
        orderidPI.setValue(orderid);
        //Set dataType
        orderidPI.setType(String.class);
        //Add the property to request object
        request.addProperty(orderidPI);
        usernamePI.setName("username");
        //Set dataType
        usernamePI.setValue(username);
        //Set dataType
        usernamePI.setType(String.class);
        //Add the property to request object
        request.addProperty(usernamePI);


        // Create envelope
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        // Set output SOAP object
        envelope.setOutputSoapObject(request);
        // Create HTTP call object
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);


        try {
            // Invoke web service
            androidHttpTransport.call(SOAP_ACTION+webMethName, envelope);
            // Get the response
            SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
            // Assign it to  boolean variable variable
            loginStatus = Boolean.parseBoolean(response.toString());

        } catch (Exception e) {
            //Assign Error Status true in static variable 'errored'

            e.printStackTrace();
        } 
        //Return booleam to calling object
        return loginStatus;
    }
}

当我按下批准按钮时,我的活动崩溃了,这是我在 logcat 中看到的一些内容:

FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.newmaamoontest.Info$AsyncCallWS.onPreExecute(Info.java:151)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
at android.os.AsyncTask.execute(AsyncTask.java:534)

【问题讨论】:

  • 什么是webservicePG?
  • 进度条和我一般配置
  • 你在哪里配置的 webservicePG 帖子也...
  • 你在哪里初始化的?
  • 你没有用findViewById()初始化webservicePG

标签: android web-services android-asynctask


【解决方案1】:

您没有初始化 webservicePG 视图变量。您试图在不实例化对象的情况下调用方法。 尝试使用 onCreate 方法初始化和实例化 webservicePG webservicePG = findViewById(R.id.your_id); 或者如果您正在动态创建 webservicePG = new View(this);

【讨论】:

    【解决方案2】:

    在我看来,在您尝试设置它的可见性时,您还没有初始化您的 webservicePG 变量。 这是一个视图,所以你打电话给 webservicePG = findViewById(R.id.your_webservicePG_id); 在你的onCreate()onCreateView()

    【讨论】:

      【解决方案3】:

      更好的解决方案是移动

               status="1";
               ordernumber="25";
               userid="11";
               //Create instance for AsyncCallWS
              AsyncCallWS task = new AsyncCallWS();
              //Call execute 
              task.execute();
      

      到一个方法。在该方法中,您启动进度对话框并执行任务。对于 Android,您会遇到问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-28
        • 2020-03-26
        • 2016-12-24
        • 1970-01-01
        相关资源
        最近更新 更多