次の問題があります。android.os.NetworkOnMainThreadException を取得した後、解決策を探しましたが、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());
}
}
}
私が理解している限り、ここに入れなければならない唯一のものは
new MyClassName ().execute(a, b, c);
私のCheckStatusメソッドで。(このメソッドは、ボタンが押されたときに呼び出されます)
では、この行はどこに行くのでしょうか?
プライベート クラスMyClassNameは AsyncTask を拡張します
ここで、新しいクラスを作成し、適切な名前を付けてから、次の行を追加します
protected Long doInBackground(Params... params)
そして私のCheckStatusのコード部分。
ここまででいいの?
次は、execute(a,b,c) 呼び出しを実行する必要があるパラメーターはどれかわかりません。
誰かが私のコードを使用してコード例を教えてもらえますか? 本当に感謝します。基本的な質問で申し訳ありませんが、仕組みがわかりません。
ご協力ありがとうございました!