2017-05-15 10 views
-2

Webサービスに接続し、Androidを使用してXML出力を取得する必要があります。 Webサービスは、指定された単語に対して同義語を英語で提供します。あなたは次のように私は、コードを変更した非同期タスクを使用せずに、Androidの中でこれを行うことはできませんので、次のJavaコードは、しかし、APIプロバイダによって非同期タスクを使用してWebサービスが呼び出されない

public class Thesaurus { 
public static void main(String[] args) { 
    new SendRequest("peace", "en_US", "test", "xml"); 
} 
} // end of Thesaurus 

class SendRequest { 
    final String endpoint = "http://thesaurus.altervista.org/thesaurus/v1"; 

    public SendRequest(String word, String language, String key, String output) { 
    try { 
     URL serverAddress = new URL(endpoint + "?word=" + URLEncoder.encode(word, "UTF-8") + "&language=" + language + "&key=" + key + "&output=" + output); 
     HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection(); 
     connection.connect(); 
     int rc = connection.getResponseCode(); 
     if (rc == 200) { 
      String line = null; 
      BufferedReader br = new BufferedReader(new java.io.InputStreamReader(connection.getInputStream())); 
      StringBuilder sb = new StringBuilder(); 
      while ((line = br.readLine()) != null) { 
       sb.append(line + '\n'); 
      } 
      System.out.print(sb.toString()); 
     } else { 
      System.out.println("HTTP error:" + rc); 
     } 
     connection.disconnect(); 

    } catch (java.net.MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (java.net.ProtocolException e) { 
     e.printStackTrace(); 
    } catch (java.io.IOException e) { 
     e.printStackTrace(); 
    } 
} 
} // end of SendRequest 

を提供され、

class SendRequest extends AsyncTask<Void, Void, Void> { 
    final String endpoint = "http://thesaurus.altervista.org/thesaurus/v1"; 
    final String key = "test"; 
    final String language = "en_US"; 
    final String output = "xml"; 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      URL serverAddress = new URL(endpoint + "?word=" + URLEncoder.encode(text, "UTF-8") + "&language=" + language + "&key=" + key + "&output=" + output); 
      HttpURLConnection connection = (HttpURLConnection) serverAddress.openConnection(); 
      connection.connect(); 
      int rc = connection.getResponseCode(); 
      if (rc == 200) { 
       String line = null; 
       BufferedReader br = new BufferedReader(new java.io.InputStreamReader(connection.getInputStream())); 
       StringBuilder sb = new StringBuilder(); 
       while ((line = br.readLine()) != null) { 
        sb.append(line + '\n'); 
       } 
       synonymTxt = sb.toString(); 
      } else { 
       synonymTxt = "HTTP error:" + rc; 
      } 
      connection.disconnect(); 

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

    @Override 
    protected void onPostExecute(Void result) { 
     AlertDialog ad1 = new AlertDialog.Builder(CreateAppointmentActivity.this).create(); 
     ad1.setTitle("Synonym Results"); 
     ad1.setMessage(synonymTxt); 
     ad1.setButton(AlertDialog.BUTTON_POSITIVE, "Okay", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

      } 
     }); 
     ad1.show(); 
    } 
} 

ここに私の問題があります実行後ブロックは実行されますが、出力は空として与えられます。 Asyncタスクは内部クラスとして使用され、変数 "text"と "synonymtxt"はクラスレベルの変数です。私はこれで約12時間苦労しています。私の唯一の提案は、非同期タスクが完了するまでコードが待たないということです。どうすればこの出力を得ることができますか?

+0

'synonymTxt =' sb.toString();の行の後に 'synonymTxt'の値を記録するとどうなりますか? –

+0

onPostExecuteのAlertDialogは、それが空であることを示します。 –

+0

コンソールログに印刷して、Webサービスから返される内容を確認してください。 –

答えて

0

問題が見つかりました。それは私自身の責任でした。私はマニフェストの間違った場所に権限を入れていました。それらを再配置して今すぐ動作します

関連する問題