0

Java は初めてで、Web サービスからブラジルの住所を取得するためのライブラリを作成しようとしていますが、応答を読み取ることができません。

クラスのコンストラクターにはresult、応答を追加したいこの文字列があります。この変数に応答が入力されると、何をすべきかがわかります。

問題は次のとおりです。何らかの理由で、BufferedReaderオブジェクトが機能していないと思われるため、読み取る応答がありません:/

コードは次のとおりです。

package cepfacil;

import java.net.*;
import java.io.*;
import java.io.IOException;

public class CepFacil {
    final String baseUrl = "http://www.cepfacil.com.br/service/?filiacao=%s&cep=%s&formato=%s";
    private String zipCode, apiKey, state, addressType, city, neighborhood, street, status = "";

    public CepFacil(String zipCode, String apiKey) throws IOException {
        String line = "";

        try {
            URL apiUrl = new URL("http://www.cepfacil.com.br/service/?filiacao=" + apiKey + "&cep=" + 
                    CepFacil.parseZipCode(zipCode) + "&formato=texto");

            String result = "";

            BufferedReader in = new BufferedReader(new InputStreamReader(apiUrl.openStream()));

            while ((line = in.readLine()) != null) {
                result += line;
            }
            in.close();

            System.out.println(line);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

        this.zipCode = zipCode;
        this.apiKey = apiKey;
        this.state = state;
        this.addressType = addressType;
        this.city = city;
        this.neighborhood = neighborhood;
        this.street = street;
    }
}

コードがどのように機能するかを次に示します。次のようにオブジェクトを作成します。

String zipCode = "53416-540";
String token = "0E2ACA03-FC7F-4E87-9046-A8C46637BA9D";

CepFacil address = new CepFacil(zipCode, token);

// so the apiUrl object string inside my class definition will look like this:
// http://www.cepfacil.com.br/service/?filiacao=0E2ACA03-FC7F-4E87-9046-A8C46637BA9D&cep=53416540&formato=texto
// which you can check, is a valid url with content in there

簡潔にするためにこのコードの一部を省略しましたが、コンストラクターで呼び出されるすべてのメソッドはコードで定義されており、コンパイル エラーや実行時エラーは発生しません。

私はあなたが私に与えることができるどんな助けにも感謝します、そして私は最も簡単な可能な解決策を聞きたいです:)

前もって感謝します!

更新:問題を修正できるようになったので(問題を指摘してくれた@Uldzへの巨大な小道具)、オープンソースですhttp://www.rodrigoalvesvieira.com/cepfacil/

4

3 に答える 3

1

System.out.println(line + "rodrigo"); 

結果ではなく行を出力します。たぶん最後の行は空ですか?

于 2013-02-12T12:52:14.583 に答える
0

InputStreamReaderにエンコーディングを追加できます/追加する必要があります。そして、結果は改行を追加しません。

        BufferedReader in = new BufferedReader(new InputStreamReader(apiUrl.openStream()));

        while ((line = in.readLine()) != null) {
            System.out.println("Line: " + line);
            String[] keyValue = line.split("\\s*=\\s*", 2);
            if (keyValue.length != 2) {
                System.err.println("*** Line: " + line);
                continue;
            }
            switch (keyValue[0]) {
                case "status":
                    status = keyValue[1];
                    break;
                ...
                default:
                    System.err.println("*** Key wrong: " + line);
            }
            result += line + "\n";
        }
        in.close();
于 2013-02-12T12:56:25.473 に答える
0

複数の理由が考えられます。でラップするURLHttpURLConnection、応答コードと、サーバーから取得した応答に関する詳細情報を確認するのに役立ちます。

于 2013-02-12T12:46:29.113 に答える