2016-07-05 10 views
0

android javaのwebserviceを呼び出す必要があり、別のクラスが呼び出す必要があります。私は最後に、UIでwsの応答を示しています。Android JavaでRestfull WebServiceを非同期で呼び出す

私はwebserviceをやりました。 「非同期」の部分だけが正しく動作していません。

これは、3つの文字列の受信、私のWebサービスです。

WebServiceRestFull web = new WebServiceRestFull(this); 
web.wsURL = "http://someurl.com/rest/etc"; 
web.wsFunction = "login"; 
web.wsInput = "mike"; 
web.execute(); 
Thread.sleep(1000); 
: "Androidのアクティビティ" 次のように私は、この非同期クラスを呼び出すには、他の側では

public class WebServiceRestFull extends AsyncTask<String, String, String> 
 
{ 
 
    protected ProgressDialog dialog; 
 

 

 
    public String wsURL; 
 
    public String wsFunction; 
 
    public String wsInput; 
 

 
    public int codeHTTP; 
 
    public String messageHTTP; 
 
    public String strResponse; 
 

 

 
    public WebServiceRestFull(Context act) 
 
    { 
 
     dialog = new ProgressDialog(act); 
 
    } 
 

 
    @Override 
 
    protected void onPreExecute() { 
 
     dialog.setMessage("Wait please..."); 
 
     dialog.show(); 
 
    } 
 

 
    @Override 
 
    protected void onPostExecute(String result) 
 
    { 
 
     if (dialog.isShowing()) 
 
     { 
 
      dialog.dismiss(); 
 
     } 
 
    } 
 

 
    @Override 
 
    protected String doInBackground(String... params) 
 
    { 
 
String url = wsURL + wsFunction; 
 
     String inputCoded = EncodeString(wsInput); 
 

 
     HttpURLConnection request; 
 

 
     URL urlToRequest = new URL(url); 
 
     request = (HttpURLConnection) urlToRequest.openConnection(); 
 

 
     request.setDoOutput(true); 
 
     request.setDoInput(true); 
 
     request.setRequestProperty("Content-Type", "application/json"); 
 
     request.setRequestMethod("POST"); 
 

 
     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(request.getOutputStream()); 
 
     outputStreamWriter.write("\""+inputCoded+"\""); 
 
     outputStreamWriter.flush(); 
 
     outputStreamWriter.close(); 
 

 
     codeHTTP = request.getResponseCode(); 
 
     messageHTTP = request.getResponseMessage(); 
 

 
     InputStream is = request.getInputStream(); 
 

 
     String resp = convertStreamToString(is); 
 
     strResponse = DecodeString(resp); 
 

 
     request.disconnect(); 
 

 
     
 
     return strResponse; 
 
    } 
 
    catch (Exception ex) 
 
    { 
 
     ex.printStackTrace(); 
 
     return "ERROR"; 
 
    } 
 
    }  
 
}

問題は、これが実際に非同期呼び出しを行わず、結果が通常Webサービスによって受信されないということです。

これを行う簡単な方法はありますか、私はwebserviceまたは独自のwebserviceクラスの呼び出しとしていくつかの面で間違っていますか?

私の英語のために残念です。

ありがとうございます!

+0

なぜThread.sleep(1000)を使用しますか?代わりに、結果の後に結果を得るためにコールバックメソッドを使用します。 – Muthu

答えて

0

何もあなたが作成され、このasynctaskをexcecuted方法が間違っているん

だけのThread.sleep()を使用しないでください。

そして、問題は、我々がここに

+0

私はそのコードで私の質問を編集しました。 – user3178284

+0

ログの再生を試みてください。リクエスト中に問題が発生した場合は、警告が表示されます –

0

を持っていないコードdoInBackground()メソッドでは、明らかであるが、あなたのコードは完全ですか?あなたのクラスにはhttpリクエストを行うものは何もありません。残りはうまくいくようです。 Okhttpを使ってみてください。本当に簡単です。それをチェックしてくださいhere

スレッドスリープは、このような良いアイデアではないメインスレッドで実行されます。コールバックを実行し、結果を公開するために実行します。

関連する問題