我有以下问题。在我得到了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)是您处理这类问题的第一站。如果文档不符合要求,请使用您最喜爱的搜索引擎找到一些教程或示例。 –