Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:下载XML数据以在应用程序中显示-获取空值_Java_Android_Xml_Api_Zillow - Fatal编程技术网

Java Android:下载XML数据以在应用程序中显示-获取空值

Java Android:下载XML数据以在应用程序中显示-获取空值,java,android,xml,api,zillow,Java,Android,Xml,Api,Zillow,我试图从API填充XML数据,但结果为空。我尝试了stackoverflow的许多解决方案,这是我的最新迭代。为什么我在按下按钮后没有将XML数据填充到我的应用程序中?我没有收到任何错误消息。我把它分成两类。一个类具有UI,并将用户输入的字符串分隔为URL的两个格式正确的字段,并具有AsyncTask。另一个类具有URL实例并执行 我知道url的格式正确,因为我在最后一个url上尝试了println,并从控制台单击它,它转到了正确的xml。我使用的测试地址是(街道:2114毕格罗大街/zip:

我试图从API填充XML数据,但结果为空。我尝试了stackoverflow的许多解决方案,这是我的最新迭代。为什么我在按下按钮后没有将XML数据填充到我的应用程序中?我没有收到任何错误消息。我把它分成两类。一个类具有UI,并将用户输入的字符串分隔为URL的两个格式正确的字段,并具有AsyncTask。另一个类具有URL实例并执行

我知道url的格式正确,因为我在最后一个url上尝试了println,并从控制台单击它,它转到了正确的xml。我使用的测试地址是(街道:2114毕格罗大街/zip:98109) 代码如下:

GetProperty.java:

public class GetProperty {

    public String address;
    //URL with ZWSID
    public static final String myURL = "http://www.zillow.com/webservice/GetDeepSearchResults.htm?zws-id=[REMOVED ID]";
    public String finalUrl;
    String line;
    private static final boolean DEBUG = true;

    public GetProperty(String address) {
        this.address = address;
        finalUrl = myURL + address;
        System.out.println("The FINAL URL string is: " + finalUrl);
        line = "";

    }

    public void load() throws MalformedURLException, IOException
    {
        //Create URL with address from above
        URL  url = new URL(finalUrl);


        //URLConnection connection = url.openConnection();
        InputStream stream = url.openStream();
        BufferedReader br;

        try
        {
            br = new BufferedReader(new InputStreamReader(stream));

            // consume any data remaining in the input stream
            while (br.readLine() != null) {
               line = line + br.readLine(); }

            br.close();         

        }

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

    }

    public String getLine() {
        return line;
    }
}

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    EditText getStreetET;
    EditText getZipET;
    Button getInfoBTN;
    TextView xmlTextView;


    String streetAddress;
    String zipAddress;
    String userAddress;
    GetProperty property;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getStreetET = (EditText) findViewById(R.id.editText);
        getZipET = (EditText) findViewById(R.id.editText2);
        xmlTextView = (TextView) findViewById(R.id.textView);
        getInfoBTN = (Button) findViewById(R.id.button);

        //Get information about address user typed in edit text when BUTTON is clicked
        getInfoBTN.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                //Get text from user and change it to a string
                streetAddress = getStreetET.getText().toString();
                //Add a + sign wherever there is a space in the street address
                streetAddress = streetAddress.replaceAll(" ", "+");
                //adding &address= for the URL
                streetAddress = "&address=" + streetAddress;

                zipAddress = "&citystatezip=" + getZipET.getText().toString();

                //Combine street & zip into one string address
                userAddress = streetAddress + zipAddress;
                System.out.println("The user address without the URL is: " + userAddress);

                //Make sure the user actually typed something
                if(!containsWhiteSpace(userAddress)) {
                    getAddressInfoTask addressTask = new getAddressInfoTask();
                    addressTask.execute(userAddress);

                }

                //Test if user typed in correct address?
                else {
                    xmlTextView.setText("");
                }
            }
        });

    }

    public static boolean containsWhiteSpace(String userAddress) {
        if (!hasLength(userAddress)) {
            return false;
        }
        int strLen = userAddress.length();
        for (int i = 0; i < strLen; i++) {
            if (Character.isWhitespace(userAddress.charAt(i))) {
                return true;
            }
        }
        return false;
    }

    public static boolean hasLength(String userAddress) {
        return (userAddress != null && userAddress.length() > 0);
    }

    //AsyncTask for separate thread due to internet connection
    private class getAddressInfoTask extends AsyncTask<String, Void, GetProperty>
    {

        protected GetProperty doInBackground(String... params)
        {


            property = new GetProperty(userAddress);
            try
            {
                property.load();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }

            return property;
        }

        protected void onPostExecute(GetProperty property)
        {
            //Place the XML in the TextView
            xmlTextView.setText(property.getLine());
        }
    }


}
public类MainActivity扩展了AppCompatActivity{
编辑文本getstreette;
EditText-getZipET;
按钮getInfoBTN;
TextView xmlTextView;
字符串地址;
弦乐女;
字符串用户地址;
获得财产;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getStreetET=(EditText)findViewById(R.id.EditText);
getZipET=(EditText)findViewById(R.id.editText2);
xmlTextView=(TextView)findViewById(R.id.TextView);
getInfoBTN=(按钮)findViewById(R.id.Button);
//获取有关单击按钮时用户在编辑文本中键入的地址的信息
getInfoBTN.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图){
//从用户处获取文本并将其更改为字符串
streetAddress=getStreetET.getText().toString();
//在街道地址中有空格的地方添加+标志
streetAddress=streetAddress.replaceAll(“,”+”);
//为URL添加&address=
streetAddress=“&address=“+streetAddress;
zipAddress=“&citystatezip=“+getZipET.getText().toString();
//将street和zip合并为一个字符串地址
userAddress=streetAddress+zipAddress;
System.out.println(“没有URL的用户地址是:“+userAddress”);
//确保用户确实键入了一些内容
如果(!containsWhiteSpace(userAddress)){
getAddressInfoTask addressTask=新建getAddressInfoTask();
addressTask.execute(用户地址);
}
//测试用户键入的地址是否正确?
否则{
xmlTextView.setText(“”);
}
}
});
}
公共静态布尔containsWhiteSpace(字符串用户地址){
如果(!hasLength(userAddress)){
返回false;
}
int strLen=userAddress.length();
对于(int i=0;i0);
}
//由于internet连接,单独线程的异步任务
私有类getAddressInfoTask扩展了AsyncTask
{
受保护的GetProperty doInBackground(字符串…参数)
{
property=新的GetProperty(userAddress);
尝试
{
property.load();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
归还财产;
}
受保护的void onPostExecute(GetProperty属性)
{
//将XML放在TextView中
xmlTextView.setText(property.getLine());
}
}
}

我用变量
finalUrl
设置为
https://www.google.com
,它成功地在应用程序中打印了xml。因此,代码的检索部分是有效的

然后,我尝试了一个基于并使用您的API密钥的请求(您建议不要共享它),就像这样,直接在浏览器上:

http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=X1-ZWz1fz4ljopwjv_4wzn5&address=1600%20Pennsylvania%20Ave&citystatezip=20500
响应是xml格式的,但它表示以下内容:

错误:此帐户无权执行此API调用

代码上的完全相同的请求会给出响应
null
。这是因为错误和正常流不一样。当Chrome发现正常流为空时,它可以在窗口上路由错误,但编码器必须手动执行


PS:您应该首先使用postman在API上测试请求。然后在你的程序上测试它,在一个url上测试后,你确定它能工作。

我用变量
finalUrl
设置为
https://www.google.com
,它成功地在应用程序中打印了xml。因此,代码的检索部分是有效的

然后,我尝试了一个基于并使用您的API密钥的请求(您建议不要共享它),就像这样,直接在浏览器上:

http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=X1-ZWz1fz4ljopwjv_4wzn5&address=1600%20Pennsylvania%20Ave&citystatezip=20500
响应是xml格式的,但它表示以下内容:

错误:此帐户无权执行此API调用

代码上的完全相同的请求会给出响应
null
。这是因为错误和正常流不一样。当Chrome发现正常流为空时,它可以在窗口上路由错误,但编码器必须手动执行


PS:您应该首先使用postman在API上测试请求。然后在您的程序上测试它。在url上测试后,您确定它可以工作。

您是否尝试使用断点进行调试?我已尝试使用此工具查看您的xml:(从url加载)。它说:“错误:城市/州/邮编参数无效或丢失”(代码:501),因此