繁体   English   中英

在Java / Android上打印出Json API Request的结果

[英]Printing out results of Json API Request on Java/Android

我正在使用Konstantin Burov在Stackoverflow帖子( 用android发出HTTP请求 )上演示的以下指南:

首先,请求访问网络的权限,在清单中添加以下内容:

<uses-permission android:name="android.permission.INTERNET" />

然后,最简单的方法是使用与Android捆绑在一起的Apache http客户端:

    HttpClient httpclient = new DefaultHttpClient();
    HttpResponse response = httpclient.execute(new HttpGet(URL));
    StatusLine statusLine = response.getStatusLine();
    if(statusLine.getStatusCode() == HttpStatus.SC_OK){
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        response.getEntity().writeTo(out);
        out.close();
        String responseString = out.toString();
        //..more logic
    } else{
        //Closes the connection.
        response.getEntity().getContent().close();
        throw new IOException(statusLine.getReasonPhrase());
    }

如果希望它在单独的线程上运行,建议您扩展AsyncTask:

class RequestTask extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... uri) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response;
        String responseString = null;
        try {
            response = httpclient.execute(new HttpGet(uri[0]));
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                out.close();
                responseString = out.toString();
            } else{
                //Closes the connection.
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
        } catch (ClientProtocolException e) {
            //TODO Handle problems..
        } catch (IOException e) {
            //TODO Handle problems..
        }
        return responseString;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        //Do anything with response..
    }
}

然后,您可以通过以下方式提出请求:

   new RequestTask().execute("http://stackoverflow.com");

我的问题是现在如何将实际结果发布到字符串中? 当我执行新RequestTask()。execute(url).toString();时,我得到的只是地址。

您的响应作为onPostExecute(String)的参数传递。 您应该使用此方法处理响应。 请注意, onPostExecute(String)在UI线程上运行,因此,作为此方法的一部分,您不能进行冗长的操作。

当您调用new RequestTask().execute(url).toString(); 您只是在调用AsyncTasktoString()方法( 检查 execute() 的返回值 :它只是返回this ,即您正在调用execute()的AsyncTask)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM