阅读背景:

尝试将JSON字符串发送到客户端android端时500内部服务器错误GAE?

来源:互联网 

I am working on Google App Engine to store data.My application is a android application and I want to receive datas from GAE datastore side.However when I want to receive ArrayList as a JSON text , I am getting "Error : 500 Internal Server Error" message and I could not find any solution about that I put my client and server side codes here ;

我正在使用Google App Engine存储数据。我的应用程序是一个Android应用程序,我想从GAE数据存储区接收数据。但是当我想接收ArrayList作为JSON文本时,我得到“错误:500内部服务器错误“消息,我找不到任何解决方案,我把我的客户端和服务器端代码放在这里;

Server Side

@SuppressWarnings("serial")
public class ReceiveLoc extends HttpServlet{
public static final String USER_ID = "userId";
public static final String USER_LATITUDE = "latitude";
public static final String USER_LONGITUDE = "longitude";


@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    // TODO Auto-generated method stub
    String user_id = req.getParameter(USER_ID);
    resp.setContentType("application/json");
    PrintWriter out = resp.getWriter();
    out.println(receiveLoc(user_id));
    out.flush();
}
private String receiveLoc(String user_id) {
    // TODO Auto-generated method stub
    ArrayList<Location> locations = new ArrayList<ReceiveLoc.Location>();
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Filter filterId = new FilterPredicate(USER_ID, Query.FilterOperator.EQUAL,user_id);
    Query q = new Query("UserLoc");
    q.setFilter(filterId);

    PreparedQuery pq = datastore.prepare(q);

    for(Entity result: pq.asIterable()){
        double latitude = (double) result.getProperty(USER_LATITUDE);
        double longitude = (double) result.getProperty(USER_LONGITUDE);
        locations.add(Location.newInstance(latitude, longitude));
    }
    Type type = new TypeToken<ArrayList<Location>>() {}.getType();
    Gson gson = new Gson();
    String json = gson.toJson(locations,type);
    return json;
}static class Location {
    double latitude;
    double longitude;

    public Location(double latitude,double longitude){
        this.latitude = latitude;
        this.longitude = longitude;
    }
    public double getLatitude() {
        return latitude;
    }
    public double getLongitude() {
        return longitude;
    }
    public static Location newInstance(double latitude,double longitude){
        return new Location(latitude, longitude);
    }
}
}

Client Side

class ClientAsyncReceiveLoc extends AsyncTask<String,Void,String> {
    //This ASYNCTASK class created different from ClientAsync class because in that class,
    //locations(double) values are processed.
    Activity activity;
    //constructor.
    public ClientAsyncReceiveLoc(Activity activity) {
        this.activity = activity;
    }

    @Override
    protected String doInBackground(String... user_id) {
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost("https://application-id.appspot.com/" + MainActivity.OPERATION_RECEIVE_LOC);
        List<NameValuePair> nameValuePairs = new ArrayList<>(1);
        nameValuePairs.add(new BasicNameValuePair(User.USER_ID, user_id[0]));

        try {
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpClient.execute(httpPost);
            Log.i("Connection Response Code",String.valueOf(response.getStatusLine().getStatusCode()));
            if (response.getStatusLine().getStatusCode() == 200) {
                HttpEntity entity = response.getEntity();
                return EntityUtils.toString(entity);
            }
            return "Error : " + response
                    .getStatusLine()
                    .getStatusCode() + " " + response
                    .getStatusLine().getReasonPhrase();
        } catch (MalformedURLException e) {
           return e.getMessage();
        } catch (UnsupportedEncodingException e) {
           return e.getMessage();
        } catch (IOException e) {
           return e.getMessage();
        }
    }
    @Override
    protected void onPostExecute(String jsonResponse) {
        //super.onPostExecute(s);
        Log.i("RECEIVED",jsonResponse);
    }
}

1 个解决方案

#1


While I am adding to GSON external library to my project , I just did step which is RightClickProject>Build Path>Configure Build Path(Libraries Tab)->Add External JARs steps and I forgot these instructions place it in the war/WEB-INF/lib folder of your google web project that's why , when I want to receive datas thanks to gson from serverside project , I got the 500 Internal Server Error as a response message. According to this, I suggest everybody who got these problem , be careful while adding any external library to your project.

当我向我的项目添加GSON外部库时,我刚刚执行了右键菜单>构建路径>配置构建路径(库选项卡) - >添加外部JAR步骤,我忘记了这些说明将它放在war / WEB-INF中你的谷歌网络项目的/ lib文件夹,这就是为什么,当我想通过服务器端项目的gson接收数据时,我得到500内部服务器错误作为响应消息。根据这个,我建议每个遇到这些问题的人,在为项目添加任何外部库时要小心。

Link which is help to me to solve problem is LINK .

有助于我解决问题的链接是LINK。


分享到: