Android 从开放API HTTP连接并获取JSON响应

Android 从开放API HTTP连接并获取JSON响应,android,http,androidhttpclient,Android,Http,Androidhttpclient,我一直试图通过自己的教程、文档和搜索问题来解决这个问题,但我找不到解决方案。我已经通过教程进行了连接,但我一直在尝试连接到API。 这个我一直试图得到一个结果,但我没有足够的知识在这方面解决它自己。我发布了我是如何尝试实现它的问题:如何获得JSON响应?如果您需要更多信息,我将更新我的问题。如果你认为这是一个糟糕的问题,为什么我可以纠正自己 public class JSONTesting extends ActionBarActivity { /* Example displ

我一直试图通过自己的教程、文档和搜索问题来解决这个问题,但我找不到解决方案。我已经通过教程进行了连接,但我一直在尝试连接到API。 这个我一直试图得到一个结果,但我没有足够的知识在这方面解决它自己。我发布了我是如何尝试实现它的问题:如何获得JSON响应?如果您需要更多信息,我将更新我的问题。如果你认为这是一个糟糕的问题,为什么我可以纠正自己

public class JSONTesting extends ActionBarActivity {
    /*
     Example displayed on site: scala/exercise [master] http http://localhost:9000/exercises/category/forearms
     HTTP/1.1 200 OK
     Content-Length: 1606
     Content-Type: application/json
     **Search
     List All Exercises: http http://localhost:9000/exercises/
     Search By Muscle Group:  http http://localhost:9000/exercises/category/forearms
     Search By Letter:  http http://localhost:9000/exercises/a
      */
    TextView textView;
    String LINK = "http://10.0.3.2:9000/exercises/"; //Genymotion (10.0.3.2)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jsontesting);
        textView = (TextView) findViewById(R.id.textView);

        new HttpAsyncTask().execute(LINK + "");
    }

    public static String GET(String url) {
        InputStream inputStream = null;
        String result = "";
        try {
            // create HttpClient
            HttpClient httpclient = new DefaultHttpClient();

            // make GET request to the given URL
            HttpGet httpget = new HttpGet(url);
            httpget.setHeader("Content-Type", "application/json");
            HttpResponse httpResponse = httpclient.execute(httpget);//HostConnection::get() New Host Connection established 0xa4816120, tid 1602

            // receive response as inputStream
            inputStream = httpResponse.getEntity().getContent();
            // convert inputstream to string
            if (inputStream != null) {
                result = convertInputStreamToString(inputStream);
            } else {
                result = "Did not work!";
            }
        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }
        return result;
    }

    private static String convertInputStreamToString(InputStream inputStream) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line = "";
        String result = "";
        while ((line = bufferedReader.readLine()) != null)
            result += line;
        inputStream.close();
        return result;

    }


    private class HttpAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {

            return GET(urls[0]);
        }

        // onPostExecute displays the results of the AsyncTask.
        @Override
        protected void onPostExecute(String result) {
            Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show();
            textView.setText(result);
        }
    }

    // check network connection
    public boolean isConnected() { // Returns Connected
        ConnectivityManager connMgr = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected())
            return true;
        else
            return false;
    }
}
公共类JSONTesting扩展了ActionBarActivity{
/*
站点上显示的示例:scala/exercise[master]httphttp://localhost:9000/exercises/category/forearms
HTTP/1.1200ok
内容长度:1606
内容类型:application/json
**搜寻
列出所有练习:httphttp://localhost:9000/exercises/
按肌肉组搜索:httphttp://localhost:9000/exercises/category/forearms
按字母搜索:httphttp://localhost:9000/exercises/a
*/
文本视图文本视图;
字符串链接=”http://10.0.3.2:9000/exercises/“;//Genymotion(10.0.3.2)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jsontesting);
textView=(textView)findViewById(R.id.textView);
新建HttpAsyncTask()。执行(链接+“”);
}
公共静态字符串获取(字符串url){
InputStream InputStream=null;
字符串结果=”;
试一试{
//创建HttpClient
HttpClient HttpClient=新的DefaultHttpClient();
//对给定URL发出GET请求
HttpGet HttpGet=新的HttpGet(url);
setHeader(“内容类型”、“应用程序/json”);
HttpResponse HttpResponse=httpclient.execute(httpget);//主机连接::get()新主机连接已建立0xa4816120,tid 1602
//作为inputStream接收响应
inputStream=httpResponse.getEntity().getContent();
//将inputstream转换为字符串
如果(inputStream!=null){
结果=convertInputStreamToString(inputStream);
}否则{
结果=“不起作用!”;
}
}捕获(例外e){
d(“InputStream”,例如getLocalizedMessage());
}
返回结果;
}
私有静态字符串convertInputStreamToString(InputStream InputStream)引发IOException{
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(inputStream));
字符串行=”;
字符串结果=”;
而((line=bufferedReader.readLine())!=null)
结果+=行;
inputStream.close();
返回结果;
}
私有类HttpAsyncTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
返回GET(url[0]);
}
//onPostExecute显示异步任务的结果。
@凌驾
受保护的void onPostExecute(字符串结果){
Toast.makeText(getBaseContext(),“Received!”,Toast.LENGTH_LONG.show();
setText(结果);
}
}
//检查网络连接
public boolean isConnected(){//返回Connected
ConnectivityManager connMgr=(ConnectivityManager)getSystemService(this.CONNECTIVITY_服务);
NetworkInfo NetworkInfo=connMgr.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected())
返回true;
其他的
返回false;
}
}
更新

public class JSONTesting extends ActionBarActivity {

    TextView textView;
    String LINK = "http://10.0.3.2:9000/exercises/"; //Genymotion (10.0.3.2)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jsontesting);
        textView = (TextView) findViewById(R.id.textView);
        new HttpAsyncTask().execute(LINK);
    }

    public static String GET(String url) {
        JSONArray finalResult = null;
        try {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));
            StringBuilder builder = new StringBuilder();
            for (String line = null; (line = reader.readLine()) != null; ) {
                builder.append(line).append("\n");
            }
            JSONTokener tokener = new JSONTokener(builder.toString());
            finalResult = new JSONArray(tokener); //This is your JSON result
        } catch (Exception e) {
            Log.d("InputStream", e.getLocalizedMessage());
        }
        return finalResult.toString();
    }


    private class HttpAsyncTask extends AsyncTask<String, Void, String> {
        @Override
        protected String doInBackground(String... urls) {
            return GET(urls[0]);
        }

        @Override
        protected void onPostExecute(String result) {
            Toast.makeText(getBaseContext(), "Received!", Toast.LENGTH_LONG).show();
            textView.setText(result);
        }
    }
}
公共类JSONTesting扩展了ActionBarActivity{
文本视图文本视图;
字符串链接=”http://10.0.3.2:9000/exercises/“;//Genymotion(10.0.3.2)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_jsontesting);
textView=(textView)findViewById(R.id.textView);
新建HttpAsyncTask().execute(链接);
}
公共静态字符串获取(字符串url){
JSONArray finalResult=null;
试一试{
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpGet HttpGet=新的HttpGet(url);
HttpResponse HttpResponse=httpClient.execute(httpGet);
BufferedReader=新的BufferedReader(新的InputStreamReader(httpResponse.getEntity().getContent(),“UTF-8”);
StringBuilder=新的StringBuilder();
for(String line=null;(line=reader.readLine())!=null;){
builder.append(行).append(“\n”);
}
JSONTokener tokener=新的JSONTokener(builder.toString());
finalResult=newJSONArray(令牌);//这是您的JSON结果
}捕获(例外e){
d(“InputStream”,例如getLocalizedMessage());
}
返回finalResult.toString();
}
私有类HttpAsyncTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…URL){
返回GET(url[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
Toast.makeText(getBaseContext(),“Received!”,Toast.LENGTH_LONG.show();
setText(结果);
}
}
}

这是我用来从
HttpResponse
对象获取JSON响应的代码片段。尝试将
GET
方法更改为此

public static String GET(String url) {
    try {
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse httpResponse = httpClient.execute(httpGet);
        BufferedReader reader = new BufferedReader(new    InputStreamReader(response.getEntity().getContent(), "UTF-8"));
        StringBuilder builder = new StringBuilder();
        for (String line = null; (line = reader.readLine()) != null;) {
            builder.append(line).append("\n");
        }
        JSONTokener tokener = new JSONTokener(builder.toString());
        JSONArray finalResult = new JSONArray(tokener); //This is your JSON result
    } catch (Exception e) {
        Log.d("InputStream", e.getLocalizedMessage());
    }
    return finalResult.toString();
}

这里出了什么问题,它崩溃了吗?@Marcus我知道我想我会发布它,因为这是我得到的唯一回应。它没有崩溃。它实际上没有显示任何内容。HttpResponse response=httpclient.execute(httpget);我应该像这样实现响应吗?D/InputStream﹕ 拒绝连接到。我刚把这个放进去