【问题标题】:Error passing arguments to java web service method from android client app using HttpPost使用 HttpPost 从 android 客户端应用程序向 java web 服务方法传递参数时出错
【发布时间】:2014-12-22 10:52:34
【问题描述】:

我想将参数从 android 客户端应用程序传递给 java web 服务。但我收到错误。我的java web服务代码如下:

public class JsonWebService {
    @POST
    @Path("getData")
    public String getData(String category) throws Exception {
        JSONObject jsonData = new JSONObject();
        String Email = "";
        String Name = "";
        String receivedCat = "";
        boolean status = false;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost/admindb","root","");
            java.sql.PreparedStatement query = con.prepareStatement("SELECT * FROM sample WHERE Category =" + "'" + category + "'" + ";");
            ResultSet result = query.executeQuery();

            while(result.next()){
                receivedCat = result.getString("Category");
                Name = result.getString("Name");
                Email = result.getString("Email");
            }
            if(receivedCat.equals(category)){
                status = true;
                jsonData.put("Name",Name);
                jsonData.put("Email", Email);
                jsonData.put("status", status);
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    return jsonData.toString();
}

我的安卓客户端代码如下:

btnCategory = (Button)findViewById(R.id.button1);
txtCategory = (EditText)findViewById(R.id.editText1);
gridV = (GridView)findViewById(R.id.gridView1);
txtName = (EditText)findViewById(R.id.editText3);
txtEmail = (EditText)findViewById(R.id.editText2);

btnCategory.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
        Thread netThread = new Thread() {
            public void run() {
                try {
                    final JSONObject receivedJson;// = new JSONObject();
                    String URL = "http://192.168.1.7:8080/JsonWebService/services/JsonWebService/getData";
                    StringEntity params = new StringEntity("{\"category\":\"Marketing\"}");
                    DefaultHttpClient httpClient = new DefaultHttpClient();
                    HttpPost post = new HttpPost(URL);
                    post.setEntity(params);

                    HttpResponse httpres = httpClient.execute(post);
                    HttpEntity entity = httpres.getEntity();
                    String json = EntityUtils.toString(entity).toString();
                    String parts[] = json.split("<ns:return>");
                    parts = parts[1].split("</ns:return>");
                    String jsonPart = parts[0];
                    receivedJson = new JSONObject(jsonPart);
                    runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        try {
                            txtName.setText(receivedJson.getString("Name"));
                            txtEmail.setText(receivedJson.getString("Email"));
                        }
                        catch(Exception e){                     
                        }
                    }
                };
            netThread.start();
            }
        });
}

我收到以下错误:

Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character '{' (code 123) in prolog; expected '<' at [row,col {unknown-source}]: [1,1]
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:648)
at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2047)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069)
at org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:668)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
   ... 26 more
[INFO] Remaining input stream :[]

请帮我解决这个问题...谢谢...

【问题讨论】:

  • 尝试使用invokeHttp

标签: java android web-services http-post


【解决方案1】:

您的网络服务方法不期望 json 作为输入媒体类型。

利用 JAX-RS 规范的 @Consumes 和 @Produces 注释来告诉您的服务期望什么以及交付什么:

@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
@Consumes(MediaType.APPLICATION_JSON + ";charset=utf-8")

您可能还需要将 jersey-json 库包含到您的项目中。

【讨论】:

  • 当您尝试从普通的网络浏览器中访问您的网络服务时,它是否正常工作? - 有一些很棒的谷歌浏览器应用程序可用于测试网络服务(例如google.at/…
猜你喜欢
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2012-02-04
  • 2011-09-16
  • 2011-11-18
  • 2014-05-29
  • 1970-01-01
相关资源
最近更新 更多