我试图从URL中获取搜索结果
https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=JSON
并使用LogCat将其显示到log.v()中。
问题是,这个程序没有在LogCat中显示搜索结果,而是不停地运行,而我在LogCat中看到的是一个无休止的列表。
11-19 15:51:11.256: D/dalvikvm(1251):GC_FOR_ALLOC释放480 K,14%释放6651K/7688 K,暂停8ms,共计8ms 11-19 15:51:11.264: D/dalvikvm(1251):GC_FOR_ALLOC释放480 K,14%释放6651K/7688 K,暂停8ms,共计8ms 11-19 15:51:11.272: D/dalvikvm(1251):GC_FOR_ALLOC释放480 K,14%释放6651K/7688 K,暂停5ms,共计5ms 11-19 15:51:11.272: D/dalvikvm(1251):GC_FOR_ALLOC释放480 K,14%释放6651K/7688 K,暂停4ms,共计5ms 11-19 15:51:11.324: D/dalvikvm(1251):GC_FOR_ALLOC释放480 K,14%释放6651 K/7688 K,暂停45 14,共计45 14 11-19 15:51:11.332: D/dalvikvm(1251):GC_FOR_ALLOC释放480 K,14%释放6651K/7688 K,暂停8ms,共计8ms 11-19 15:51:11.400: D/dalvikvm(1251):GC_FOR_ALLOC释放480 K,14%释放6651 K/7688 K,暂停23 14,共计23 14 11-19 15:51:11.424: D/dalvikvm(1251):GC_FOR_ALLOC释放480 K,14%释放6651K/7688 K,暂停2ms,共计2ms 11-19 15:51:11.464: D/dalvikvm(1251):GC_FOR_ALLOC释放480 K,14%释放6651K/7688 K,暂停26 14,共计26 14
这从来没有停止,并一直持续下去,直到我在模拟器中杀死应用程序。
这是我的密码
公共类MainActivity扩展活动{
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;
}
}}
发布于 2014-11-19 17:05:56
尝试使用这段代码进行网络呼叫,它应该正常工作,至少可以从互联网上获取数据,然后在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;
}
}https://stackoverflow.com/questions/27021629
复制相似问题