我有以下問題。在我得到了android.os.NetworkOnMainThreadException之後,我去尋找一個解決方案,並且看起來,AsyncTask是處理這個問題的最好方法。如何使用AsyncTask,我必須在哪裏放置代碼行?
但是,當我讀了幾頁後,我仍然不知道如何實現AsyncTask。
首先,我會告訴你我知道我的問題,至今在一起:
在這裏,我會嘗試調用web服務。
package net.frontend.androidapp.statusrequest;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class PurchaseRequisitionRequest extends Activity {
private String METHOD_NAME = "parser" ;
private String NAMESPACE = "http://statusrequest.androidapp.webservice.backend.net";
private String SOAP_ACTION = NAMESPACE + METHOD_NAME;
private static final String URL = "http://10.35.105.31:8080/SAPInterfaceWebservice/services/XMLTransfromer?wsdl";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.purchase_requisition_request_activity);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.purchase_requisition_request, menu);
return true;
}
public void checkStatus (View view) {
try
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
EditText edit = (EditText) findViewById (R.id.prRequest);
String s= edit.getText().toString();
long lineNr=Long.parseLong(s);
request.addProperty("lineNr", lineNr);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION,envelope);
Object result = envelope.getResponse();
String hString = result.toString();
String[] details = hString.split(",");
((TextView) findViewById (R.id.request_detail1)).setText("PR_Number: " +details[0].substring(1));
((TextView) findViewById (R.id.request_detail2)).setText("Result1: " +details[1]);
((TextView) findViewById (R.id.request_detail3)).setText("Result2: " +details[2]);
((TextView) findViewById (R.id.request_detail4)).setText("Result3: " +details[3]);
((TextView) findViewById (R.id.request_detail5)).setText("Entered Number: " + lineNr);
} catch (Exception E) {
E.printStackTrace();
((TextView) findViewById (R.id.request_detail1)).setText("ERROR: " + E.getClass().getName() + " : " + E.getMessage());
}
}
}
據我瞭解,我已經把這裏的唯一事情就是
新MyClassName().execute(A,B,C);
對我的CheckStatus方法。 (當按下按鈕時調用此方法)
那麼這條線在哪裏?
私有類MyClassName延伸的AsyncTask
我現在創建一個新的類,給它一個好聽的名字,然後把這個線旁
保護龍doInBackground(參數... PARAMS )
然後我的代碼部分CheckStatus。
這是正確的嗎?
接下來的事情是,我不知道,哪些參數,所以你必須給予執行(a,b,c)調用?
有人可以給我一些代碼示例,使用我的代碼?我真的很感激。 我很抱歉問這麼基本的問題,但我不明白它是如何工作的。
非常感謝您的幫助!
閱讀本機制的文檔的http://開發商.android.com/reference/android/os/AsyncTask.html – Shruti
[API參考](http://developer.android.com/reference/android/os/AsyncTask.html)是您處理這類問題的第一站。如果文檔不符合要求,請使用您最喜愛的搜索引擎找到一些教程或示例。 –