【问题标题】:it didn't work to connect the android app to servlet page to passing data将android应用程序连接到servlet页面以传递数据不起作用
【发布时间】:2012-02-26 21:24:22
【问题描述】:

我想将我的 android 应用程序连接到我的 servlet 站点,我需要将一些数据从应用程序传递到 url

谁能帮帮我?

我编写了这段代码来传递两个参数,但它会产生异常:

HttpPost postMethod = new HttpPost("http://androidsaveitem.appspot.com/view");
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("description+", "HAANAA"));
formparams.add(new BasicNameValuePair("id+", "11223"));
UrlEncodedFormEntity entity;
entity = new UrlEncodedFormEntity(formparams);
postMethod.setEntity(entity);
DefaultHttpClient hc = new DefaultHttpClient();
HttpResponse response = hc.execute(postMethod);

【问题讨论】:

  • 表单名称中的那些+ 标志看起来很可疑。他们真的属于那里吗?
  • 我不能发图片 >>> 我怎么能
  • 02-26 23:39:18.583: D/AndroidRuntime(331): 关闭 VM 02-26 23:39:18.583: W/dalvikvm(331): threadid=1: 线程退出未捕获的异常 (group=0x40015560) 02-26 23:39:18.633: E/AndroidRuntime(331): FATAL EXCEPTION: main 02-26 23:39:18.633: E/AndroidRuntime(331): java.lang.IllegalStateException: 可以不执行活动的方法
  • 02-26 23:39:18.633: E/AndroidRuntime(331): at android.view.View$1.onClick(View.java:2144) 02-26 23:39:18.633: E /AndroidRuntime(331): 在 android.view.View.performClick(View.java:2485) 02-26 23:39:18.633: E/AndroidRuntime(331): 在 android.view.View$PerformClick.run(View. java:9080) 02-26 23:39:18.633: E/AndroidRuntime(331): 在 android.os.Handler.handleCallback(Handler.java:587)
  • 02-26 23:39:18.633: E/AndroidRuntime(331): 在 android.os.Handler.dispatchMessage(Handler.java:92) 02-26 23:39:18.633: E/ AndroidRuntime(331): 在 android.os.Looper.loop(Looper.java:123) 02-26 23:39:18.633: E/AndroidRuntime(331): 在 android.app.ActivityThread.main(ActivityThread.java:3683 ) 02-26 23:39:18.633: E/AndroidRuntime(331): at java.lang.reflect.Method.invokeNative(Native Method) 02-26 23:39:18.633: E/AndroidRuntime(331): at java. lang.reflect.Method.invoke(Method.java:507)

标签: android servlets android-intent android-networking


【解决方案1】:

您似乎阻塞了 UI 线程,并且引发了 ANR 异常,因为如果您的 UI 线程被阻塞 5 秒,则会发生此异常,要解决此问题,您可以使用 Thread 或 AsyncTask 来完成这项工作,所以你的 UI 线程不会被阻塞

示例:

public myAsnyc extends AsyncTask<Void, Void,Void>{



protected void doInBackground(){

HttpPost postMethod = new HttpPost("http://androidsaveitem.appspot.com/view");
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("description+", "HAANAA"));
formparams.add(new BasicNameValuePair("id+", "11223"));
UrlEncodedFormEntity entity;
entity = new UrlEncodedFormEntity(formparams);
postMethod.setEntity(entity);
DefaultHttpClient hc = new DefaultHttpClient();
HttpResponse response = hc.execute(postMethod);



    }
protected void onPostExecute(){

    log.d("myApp", "success");
}

    }

如果你想执行它 打这个电话

new myAsnyc().execute();

如果要更新 UI 元素,请使用 onPostExecute() 方法并修改异步任务的泛型类型

更新

执行以下代码 使用此代码

try {
      InetAddress i = InetAddress.getByName("http://androidsaveitem.appspot.com/view");
    } catch (UnknownHostException e1) {
      e1.printStackTrace();
    }

在调用异步任务之前 如果异常发生正常,重新运行应用程序第二次它将正常运行

【讨论】:

  • 它不起作用从 logCat 视图中看到这个表单 02-28 16:11:41.931: W/System.err(369): java.net.UnknownHostException: androidsaveitem.appspot.com 02- 28 16:11:41.931: W/System.err(369): 在 java.net.InetAddress.lookupHostByName(InetAddress.java:506) 02-28 16:11:41.941: W/System.err(369): 在java.net.InetAddress.getAllByNameImpl(InetAddress.java:294) 02-28 16:11:41.965: W/System.err(369): 在 java.net.InetAddress.getAllByName(InetAddress.java:256)
  • 02-28 16:11:41.965: W/System.err(369): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) 02-28 16:11:41.965: W/System.err(369): 在 org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 02-28 16:11:41.971: W/System.err (369): 在 org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
  • 使用此代码尝试 { InetAddress i = InetAddress.getByName(URLName); } 捕捉 (UnknownHostException e1) { e1.printStackTrace(); }
  • lsn 在发出任何 http 请求之前调用此代码,如果异常仍然存在,请重新运行应用程序
  • 但是看到这个方法它的覆盖不像你上面写的那样@Override protected Void doInBackground(Void... params){ }
猜你喜欢
  • 1970-01-01
  • 2011-06-11
  • 2022-01-18
  • 2014-07-08
  • 2011-10-04
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多