2013-06-19 9 views
1

비누 분석을 시도하고 있지만 작동하지 않습니다. 내 응용 프로그램에서 나는 1 edittext, 1 버튼, 1 textview, 응용 프로그램을 실행 한 후 출력 창을 표시합니다. 하지만 edittext에 값을 입력하고 버튼을 클릭하면 오류가 발생합니다. 나는 유 사람이 나를 도와 PLS 것, 내 MainActivity가 로그 캣에서doinbackground() 실행 중 오류가 발생했습니다. asynctask

public class MainActivity extends Activity {  
private final String NAMESPACE = "http://tempuri.org/"; 
private final String URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; 
private final String SOAP_ACTION = "http://tempuri.org/CelsiusToFahrenheit"; 
private final String METHOD_NAME = "CelsiusToFahrenheit"; 
private String TAG = "Sakthi"; 
private static String celcius; 
private static String fahren; 
Button b; 
TextView tv; 
EditText et; 

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

    //Celcius Edit Control 
    et = (EditText) findViewById(R.id.editText1); 
    //Fahrenheit Text control 
    tv = (TextView) findViewById(R.id.tv_result); 
    //Button to trigger web service invocation 
    b = (Button) findViewById(R.id.button1); 
    //Button Click Listener 
    b.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      //Check if Celcius text control is not empty 
      if (et.getText().length() != 0 && et.getText().toString() != "") { 
       //Get the text control value 
       celcius = et.getText().toString(); 
       //Create instance for AsyncCallWS 
       AsyncCallWS task = new AsyncCallWS(); 
       //Call execute 
       task.execute(); 
      //If text control is empty 
      } else { 
       tv.setText("Please enter Celcius"); 
      } 
     } 
    }); 
} 
public class AsyncCallWS extends AsyncTask<String, Void, integer> { 
    @Override 
    protected integer doInBackground(String... params) { 
     Log.i(TAG, "doInBackground"); 
     getFahrenheit(celcius); 
     return null; 
    } 

    public void getFahrenheit(String celsius) { 
     //Create request 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     //Property which holds input parameters 
     PropertyInfo celsiusPI = new PropertyInfo(); 
     //Set Name 
     celsiusPI.setName("Celsius"); 
     //Set Value 
     celsiusPI.setValue(celsius); 
     //Set dataType 
     celsiusPI.setType(double.class); 
     //Add the property to request object 
     request.addProperty(celsiusPI); 
     //Create envelope 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
       SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     //Set output SOAP object 
     envelope.setOutputSoapObject(request); 
     //Create HTTP call object 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

     try { 
      //Invole web service 
      androidHttpTransport.call(SOAP_ACTION, envelope); 
      //Get the response 
      SoapPrimitive response = (SoapPrimitive) envelope.getResponse(); 
      //Assign it to fahren static variable 
      fahren = response.toString(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onPostExecute(integer result) { 
     Log.i(TAG, "onPostExecute"); 
     tv.setText(fahren + "° F"); 
    } 

    @Override 
    protected void onPreExecute() { 
     Log.i(TAG, "onPreExecute"); 
     tv.setText("Calculating..."); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     Log.i(TAG, "onProgressUpdate"); 
    } 

}' 

오류가이

'**06-19 07:20:22.613: E/AndroidRuntime(1525): FATAL EXCEPTION: AsyncTask #1 
06-19 07:20:22.613: E/AndroidRuntime(1525): java.lang.RuntimeException: An error occured while executing doInBackground() 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at java.lang.Thread.run(Thread.java:856) 
06-19 07:20:22.613: E/AndroidRuntime(1525): Caused by: java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at com.example.medimixsoap.MainActivity$AsyncCallWS.getFahrenheit(MainActivity.java:74) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at com.example.medimixsoap.MainActivity$AsyncCallWS.doInBackground(MainActivity.java:68) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at com.example.medimixsoap.MainActivity$AsyncCallWS.doInBackground(MainActivity.java:1) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
06-19 07:20:22.613: E/AndroidRuntime(1525):  ... 4 more**' 
+0

프로젝트를 지우고 다시 실행하면 noclassdefinition found 오류가 발생합니다. 런타임에 .class 파일을 찾을 수 없습니다. – abhi

+1

celsiusPI.setType (double.class); 아마도 celsiusPI.setType (Double.class); – Blackbelt

+0

이 링크를 사용해보십시오 http://stackoverflow.com/questions/17020176/java-lang-noclassdeffounderror-com-applovin-sdk-applovinsdk/17020252#17020252 –

답변

0

같다 .. 아래 당신이 비누 개체에 대한 외부 라이브러리를 사용하십니까, 해결하는 방법 dono? 최종 apk : 프로젝트 속성 -> Java 빌드 경로 -> 탭 순서 및 내보내기에 라이브러리가 포함되어 있는지 확인하고 "Android 개인 라이브러리"가 선택되어 있는지 확인하십시오.

0

대신 :

AsyncCallWS task = new AsyncCallWS(); 
//Call execute 
task.execute(); 

이 넣어보십시오 : 대신 AsyncCallWS 클래스에 다음

AsyncCallWS threadsStart = new AsyncCallWS(); 
threadsStart.execute(celcius); 

try { 
    farenheit = threadsStart.get(); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} catch (ExecutionException e) { 
    e.printStackTrace(); 
} 

을 :

@Override 
protected integer doInBackground(String... params) { 
    Log.i(TAG, "doInBackground"); 
    getFahrenheit(celcius); 
    return null; 
} 

이 넣어보십시오 :

@Override 
protected integer doInBackground(String... params) { 
    Log.i(TAG, "doInBackground"); 
    getFahrenheit(params); 
    return null; 
} 
,536을

내가 생각하는 문제는 백그라운드 작업이 끝날 때까지 기다리지 않고 있다는 사실 때문입니다.

관련 문제