【问题标题】:Android connecting HTTP to MVC Asp.net ControllerAndroid 将 HTTP 连接到 MVC Asp.net 控制器
【发布时间】:2013-07-10 18:01:01
【问题描述】:

您好,我正在尝试从我的 MVC asp.net 获取一个 json 对象。

我遇到了一个错误

            StringBuilder url = new StringBuilder(URL);

    HttpGet get = new HttpGet (url.toString());

    HttpResponse r = client.execute(get);
    int status = r.getStatusLine().getStatusCode();

    if(status == 200)
    {
        HttpEntity e = r.getEntity();
        String data = EntityUtils.toString(e);

        JSONArray timeline = new JSONArray(data);
        JSONObject last = timeline.getJSONObject(0);

        return last;
    }
    else 
    {
        Toast.makeText(Authenticate.this, "error", Toast.LENGTH_LONG);
        return null;
    }

错误:

Java.IOException。

             public class Read extends AsyncTask <String,Integer,String>
      {

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            try{
                json = Verify();
                return json.getString(params[0]);
            }
            catch (ClientProtocolException e)
            {               
            }
            catch (IOException e)
            {               
            }
            catch (JSONException e)
            {

            }
            return null;
        }

我目前正在通过 localhost 连接。

问题发生在以下行: HttpResponse r = client.execute(get);

它没有执行,VM 上的应用程序正在崩溃。

我已将代码修改为如下所示,但仍然出现相同的错误:

   public JSONObject Verify(HttpResponse r) throws ClientProtocolException,                               IOException, JSONException
{
    //StringBuilder url = new StringBuilder(URL);
    //Adds the pin and IMEI.
    //url.append(b);
    //HttpGet get = new HttpGet (url.toString());

    //HttpResponse r = client.execute(get);
    int status = r.getStatusLine().getStatusCode();

    if(status == 200)
    {
        HttpEntity e = r.getEntity();
        String data = EntityUtils.toString(e);

        JSONArray timeline = new JSONArray(data);
        JSONObject last = timeline.getJSONObject(0);

        return last;
    }
    else 
    {
        Toast.makeText(Authenticate.this, "error", Toast.LENGTH_LONG);
        return null;
    }

}

    public class Read extends AsyncTask <String,Integer,String>
    {

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            try{
                HttpResponse r = client.execute(get);
                json = Verify(r);
                return json.getString(params[0]);
            }
            catch (ClientProtocolException e)
            {               
            }
            catch (IOException e)
            {               
            }
            catch (JSONException e)
            {

            }
            return null;
        }

Log Cat 给了我这个错误: 07-10 20:53:23.578: E/ActivityThread(661): Service com.android.exchange.ExchangeService 泄露了原本绑定在这里的 ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d17eb0 07-10 20:53:23.578: E/ActivityThread(661): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService 泄露了原来绑定的 ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d17eb0这里 07-10 20:53:23.578: E/ActivityThread(661): 在 android.app.LoadedApk$ServiceDispatcher.(LoadedApk.java:969) 07-10 20:53:23.578: E/ActivityThread(661): 在 android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863) 07-10 20:53:23.578: E/ActivityThread(661): 在 android.app.ContextImpl.bindService(ContextImpl.java:1418) 07-10 20:53:23.578: E/ActivityThread(661): 在 android.app.ContextImpl.bindService(ContextImpl.java:1407) 07-10 20:53:23.578: E/ActivityThread(661): 在 android.content.ContextWrapper.bindService(ContextWrapper.java:473) 07-10 20:53:23.578: E/ActivityThread(661): 在 com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157) 07-10 20:53:23.578: E/ActivityThread(661): 在 com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145) 07-10 20:53:23.578: E/ActivityThread(661): at com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191) 07-10 20:53:23.578: E/ActivityThread(661): 在 com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850) 07-10 20:53:23.578: E/ActivityThread(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551) 07-10 20:53:23.578: E/ActivityThread(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549) 07-10 20:53:23.578: E/ActivityThread(661): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 07-10 20:53:23.578: E/ActivityThread(661): 在 java.util.concurrent.FutureTask.run(FutureTask.java:234) 07-10 20:53:23.578: E/ActivityThread(661): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 07-10 20:53:23.578: E/ActivityThread(661): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 07-10 20:53:23.578: E/ActivityThread(661): 在 java.lang.Thread.run(Thread.java:856) 07-10 20:53:23.588: E/StrictMode(661): null 07-10 20:53:23.588: E/StrictMode(661): android.app.ServiceConnectionLeaked: Service com.android.exchange.ExchangeService 泄露了原来绑定的 ServiceConnection com.android.emailcommon.service.ServiceProxy$ProxyConnection@40d17eb0这里 07-10 20:53:23.588: E/StrictMode(661): 在 android.app.LoadedApk$ServiceDispatcher.(LoadedApk.java:969) 07-10 20:53:23.588: E/StrictMode(661): 在 android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:863) 07-10 20:53:23.588: E/StrictMode(661): 在 android.app.ContextImpl.bindService(ContextImpl.java:1418) 07-10 20:53:23.588: E/StrictMode(661): 在 android.app.ContextImpl.bindService(ContextImpl.java:1407) 07-10 20:53:23.588: E/StrictMode(661): 在 android.content.ContextWrapper.bindService(ContextWrapper.java:473) 07-10 20:53:23.588: E/StrictMode(661): 在 com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:157) 07-10 20:53:23.588: E/StrictMode(661): 在 com.android.emailcommon.service.ServiceProxy.setTask(ServiceProxy.java:145) 07-10 20:53:23.588: E/StrictMode(661): 在 com.android.emailcommon.service.ServiceProxy.test(ServiceProxy.java:191) 07-10 20:53:23.588: E/StrictMode(661): 在 com.android.exchange.ExchangeService$7.run(ExchangeService.java:1850) 07-10 20:53:23.588: E/StrictMode(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:551) 07-10 20:53:23.588: E/StrictMode(661): at com.android.emailcommon.utility.Utility$2.doInBackground(Utility.java:549) 07-10 20:53:23.588: E/StrictMode(661): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 07-10 20:53:23.588: E/StrictMode(661): 在 java.util.concurrent.FutureTask.run(FutureTask.java:234) 07-10 20:53:23.588: E/StrictMode(661): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 07-10 20:53:23.588: E/StrictMode(661): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 07-10 20:53:23.588: E/StrictMode(661): 在 java.lang.Thread.run(Thread.java:856) 07-10 20:53:23.588: W/ActivityManager(291): Unbind failed: 找不到 android.os.BinderProxy@4100de60 的连接

【问题讨论】:

    标签: android asp.net-mvc http


    【解决方案1】:

    没有更多信息很难判断,但您可能在您的 UI 线程上运行它,这是不允许的。如果是这种情况,您将需要使用 AsynTask。

    【讨论】:

    • 我在 AsynTask 中运行它如下 public class Read extends AsyncTask { @Override protected String doInBackground(String... params) { // TODO 自动生成的方法存根 try{ json = Verify();返回 json.getString(params[0]); } catch (ClientProtocolException e) { } catch (IOException e) { } catch (JSONException e) { } return null; }
    • 您能否编辑您最初的问题以添加这些内容?有点难读。
    • 我刚刚添加了感谢您的关注。
    • 好的,您的网络调用 (HttpResponse r = client.execute(get);) 需要在异步任务中。
    • 嗯,响应使用的所有东西也应该放在异步任务中,这不是完全必要的,但它只是有助于将所有东西放在一起。不知道为什么你仍然收到错误,你能把 logcat 贴在它显示错误的地方吗?另外,作为旁注,我通常不将字符串用于 httpGet,我更喜欢 URI。我怀疑这是问题的根源。
    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多