android - 从谷歌地图搜索中读取文件 json 的问题

标签 android google-maps

请告诉我下面这段代码哪里错了。我尝试了很多次,但仍然收到错误消息:“应用程序 demojson_google 意外停止”并且没有显示所有内容。这是我的代码:

类(class)成绩

    package com.javacode.android.json.model;
    import com.google.gson.annotations.SerializedName;
    public class Result {
    @SerializedName("GsearchResultClass")
    public String GsearchResultClass;

    @SerializedName("viewportmode")
    public String viewportmode;

    @SerializedName("listingType")
    public String listingType;

    @SerializedName("lat")
    public String lat;

    @SerializedName("lng")
    public String lng;

    @SerializedName("title")
    public String title;        
}

类 SearchResponse

package com.javacode.android.json.model;
import java.util.List;

public class SearchResponse {
    public List<Result> results;
}

GoogleSearchActivity 类

package com.javacode.android.json;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import com.google.gson.Gson;
import com.javacode.android.json.model.R;
import com.javacode.android.json.model.Result;
import com.javacode.android.json.model.SearchResponse;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class GoogleSearchActivity extends Activity {
    /** Called when the activity is first created. */
    String url = "ajax.googleapis.com/ajax/services/search/local?v=1.0&q=train&sll=50.00001,-5.00001";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        InputStream source = retrieveStream(url);

        Gson gson = new Gson();

        Reader reader = new InputStreamReader(source);

        SearchResponse response = gson.fromJson(reader, SearchResponse.class);

        List<Result> results = response.results;

        for (Result result : results) {
            Toast.makeText(this, result.title, Toast.LENGTH_SHORT).show();
        }

    }

    private InputStream retrieveStream(String url) {

        DefaultHttpClient client = new DefaultHttpClient(); 

        HttpGet getRequest = new HttpGet(url);

        try {

           HttpResponse getResponse = client.execute(getRequest);
           final int statusCode = getResponse.getStatusLine().getStatusCode();

           if (statusCode != HttpStatus.SC_OK) { 
              Log.w(getClass().getSimpleName(), 
                  "Error " + statusCode + " for URL " + url); 
              return null;
           }

           HttpEntity getResponseEntity = getResponse.getEntity();
           return getResponseEntity.getContent();

        } 
        catch (IOException e) {
           getRequest.abort();
           Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
        }

        return null;

     }

}

谢谢!

最佳答案

我的天,你有很多空值。第一个 null 来自 retrieveStream。试试这个:

    InputStream is = null;

    DefaultHttpClient client = new DefaultHttpClient(); 

    HttpGet getRequest = new HttpGet(url);

    try {

       HttpResponse getResponse = client.execute(getRequest);
       final int statusCode = getResponse.getStatusLine().getStatusCode();

       if (statusCode != HttpStatus.SC_OK) { 
          Log.w(getClass().getSimpleName(), 
              "Error " + statusCode + " for URL " + url); 

       }
       else
       {
           HttpEntity getResponseEntity = getResponse.getEntity();
           is = getResponseEntity.getContent();
       }

    } 
    catch (IOException e) {
       getRequest.abort();
       Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
    }

    return is;

请确保您的 list 中有 uses-permission INTERNET。

在您所有的 SearchResponse 之后也为 null。 我没有使用 gson。为什么不考虑使用旧的:

        HttpGet httpget = new HttpGet(url); 

    HttpResponse response;

    response = httpclient.execute(httpget);

    HttpEntity entity = response.getEntity();

    if (entity != null) {

        InputStream instream = entity.getContent();
        gpResult = new GPResult();

        JSONObject json=new JSONObject(
                convertStreamToString(instream
                ));
        //the rest of JSON object processing

干杯。

关于android - 从谷歌地图搜索中读取文件 json 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7433942/

相关文章:

Android- Google map v2 画圆

javascript - 谷歌地图函数 fromLatLngToContainerPixel(LatLng) 不工作

java堆空间

java - 使用 SystemProperties 在 Android 上获取序列号(品牌、设备等)

php - 在android中使用php登录

java - 无法使用 PowerMock 覆盖最终类的静态最终变量

google-maps - 谷歌地图 API v3 市政边界

javascript - 单击 Google Maps Api 标记后更改下拉值

javascript - Google map 地点 javascript 文本搜索 : can't get radius to work

java - Android:向位图添加填充