【问题标题】:Displaying a JSON Google Search in The LogCat在 LogCat 中显示 JSON Google 搜索
【发布时间】:2015-01-17 06:05:16
【问题描述】:

我正在尝试从 URL 获取搜索结果

https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=JSON

并使用 log.v() 将其显示到 LogCat 中。

问题在于,程序没有在LogCat 中显示搜索结果,而是不停地运行,而我在LogCat 中看到的是一个无穷无尽的列表

11-19 15:51:11.256: D/dalvikvm(1251): GC_FOR_ALLOC 释放 480K,14% 释放 6651K/7688K,暂停 8ms,共 8ms

11-19 15:51:11.264: D/dalvikvm(1251): GC_FOR_ALLOC 释放 480K,14% 释放 6651K/7688K,暂停 8ms,总共 8ms

11-19 15:51:11.272: D/dalvikvm(1251): GC_FOR_ALLOC 释放 480K,14% 释放 6651K/7688K,暂停 5ms,总共 5ms

11-19 15:51:11.272: D/dalvikvm(1251): GC_FOR_ALLOC 释放 480K,14% 释放 6651K/7688K,暂停 4ms,共 5ms

11-19 15:51:11.324: D/dalvikvm(1251): GC_FOR_ALLOC 释放 480K,14% 释放 6651K/7688K,暂停 45ms,总共 45ms

11-19 15:51:11.332: D/dalvikvm(1251): GC_FOR_ALLOC 释放 480K,14% 释放 6651K/7688K,暂停 8ms,共 8ms

11-19 15:51:11.400: D/dalvikvm(1251): GC_FOR_ALLOC 释放 480K,14% 释放 6651K/7688K,暂停 23ms,共 23ms

11-19 15:51:11.424: D/dalvikvm(1251): GC_FOR_ALLOC 释放 480K,14% 释放 6651K/7688K,暂停 2ms,共 2ms

11-19 15:51:11.464: D/dalvikvm(1251): GC_FOR_ALLOC 释放 480K,14% 释放 6651K/7688K,暂停 26ms,共 26ms

这永远不会停止并一直持续下去,直到我在模拟器中杀死应用程序。

这是我的代码

公共类 MainActivity 扩展 Activity {

public static final String TAG= MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    if(isNetworkAvilable()){
        GetSearchData getSearchData = new GetSearchData();
        getSearchData.execute();
        
    }
    else{
        Toast.makeText(this, "The network is down", Toast.LENGTH_SHORT).show();
    }
    
}


private boolean isNetworkAvilable() {
    // TODO Auto-generated method stub
    
    boolean isAvailable= false;
    ConnectivityManager manager=  (ConnectivityManager) 
            getSystemService(CONNECTIVITY_SERVICE);
    
    NetworkInfo networkInfo=manager.getActiveNetworkInfo();
    
    if(networkInfo !=null && networkInfo.isConnected()){
        
        isAvailable=true;
    }
    
    return isAvailable;
}




private class GetSearchData extends AsyncTask<Object, Void, String>{
    
    protected String doInBackground(Object... params){
        
        int responseCode=-1;
        try{
            
            URL url=new URL("https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=JSON");
            
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            
            connection.connect();
            
             responseCode= connection.getResponseCode();
             
            // Log.i(TAG, "Code: "+responseCode);
            
             if(responseCode== HttpURLConnection.HTTP_OK){
                 InputStream inputStream= connection.getInputStream();
                 Reader reader= new InputStreamReader(inputStream);
                 
                 int nextCharacter;
                 String responseData="";
                 while(true){
                     nextCharacter=reader.read();
                     
                     
                     
                     if(responseCode==-1){
                         break;
                     }
                     
                     responseData+= (char) nextCharacter;
                     
                 }
                 
                 JSONObject jsonObject= new JSONObject(responseData);
                 
                 
                 
                JSONObject jsonObject2= jsonObject.getJSONObject("responseData");
                 
                // JSONObject jsonObject3= jsonObject.getJSONObject("results");
                 
                 JSONArray jsonArray= jsonObject2.getJSONArray("results");
                 
                 
                 for(int i=0; i<jsonArray.length(); i++){
                     JSONObject results = jsonArray.getJSONObject(i);
                     
                     String title= results.getString("title");
                     
                     Log.v(TAG, "Result "+i+" : "+title);
                     
                 }
                 
                 
             }
             else{
                 Log.i(TAG, "Wrong Response Code: " + responseCode);
             }
             
            
            
        }
        catch(MalformedURLException e){
            Log.e(TAG, "Exception: "+e);
        }
        catch(IOException e){
            Log.e(TAG, "Exception: "+e);
        }
        
        catch(Exception e){
            Log.e(TAG, "Exception: "+e);
        }
        
        return "Code: "+responseCode;
    }
    
    
    
}

}

【问题讨论】:

  • 你能发布完整的代码,即你在哪里调用execute()?
  • @reactivemobile 对不起。我现在发布了完整的代码。
  • 这些日志消息来自垃圾收集器,它们与您的AsyncTask 无关。尝试按您的标签过滤您的日志消息,看看会发生什么。
  • @RogueBaneling 当我使用我的标签过滤它时,什么都没有显示
  • 我有时无法让LogCat 正常工作。尝试在您确定工作正常的地方(即您的 onCreate)使用 Log.v,这样您就可以判断日志消息是否正确打印。

标签: java android ajax json android-asynctask


【解决方案1】:

尝试使用此代码进行网络调用,它应该可以正常工作,至少可以从 Internet 获取数据,然后将其发布到 LogCat。

public class GetSearchData extends AsyncTask<Void,Void,Void> {

        @Override
        protected Void doInBackground(Void... params) {
            String url = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=JSON";
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            try{
                HttpResponse httpResponse = httpClient.execute(httpGet);
                String responseData = inputStreamToString(httpResponse.getEntity().getContent()).toString();
                Log.v("OUTPUT", responseData);

                JSONObject jsonObject= new JSONObject(responseData);
                JSONObject jsonObject2= jsonObject.getJSONObject("responseData");
                JSONArray jsonArray= jsonObject2.getJSONArray("results");

                for (int i = 0; i < jsonArray.length(); i++){
                   JSONObject results = jsonArray.getJSONObject(i);
                   String title = results.getString("title");
                   Log.v(TAG, "Result "+i+" : "+title);
                }

            } catch (IOException e){
                e.printStackTrace();
            } catch (JSONException e){
                e.printStackTrace();
            }
            return null;
        }

        public static StringBuilder inputStreamToString(InputStream is){
            String line;
            StringBuilder sb = new StringBuilder();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
            try {
                while ((line = rd.readLine()) != null) {
                    sb.append(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return sb;
        }
    }

【讨论】:

  • 非常感谢您的帮助。错误是因为一些如此愚蠢的事情:'),我以某种方式在 while 中断条件中写了“responseCode==-1”而不是“nextcharacter==-1”。现在我的代码有效。再次感谢并为您带来的麻烦感到抱歉。
  • 如果您通过 LogCat 查看大量 JSON,您可能会发现 lograbbit.com 很有帮助。当您双击消息时,它将漂亮地打印 JSON。 [全面披露,我是LogRabbit的创造者]
猜你喜欢
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多