【问题标题】:Query in AsyncTask giving illegalStateException在 AsyncTask 中查询给出非法状态异常
【发布时间】:2013-02-07 01:49:03
【问题描述】:

我有这个问题

http://mtmis.punjab.gov.pk/Tax Collection/searchNameTemp.jsp?names=%s

 class TrackingNumber extends AsyncTask<String, Void, String> 
 {
        @Override
        protected String doInBackground(String... arg0) 
        {
            String urlString = null;
            try {
                urlString = URLEncoder.encode(String.format(url, search), "utf-8");
            } catch (UnsupportedEncodingException e1) {
                e1.printStackTrace();
            }
            // Create a new HttpClient and Post Header
            HttpClient httpclient = new DefaultHttpClient();
            HttpGet httppost = new HttpGet(urlString);

        try {
            httpclient.getParams().setParameter("http.connection-manager.timeout", 15000); 
            HttpResponse response = httpclient.execute(httppost);

            String html = "";
            InputStream in = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder str = new StringBuilder();
            String line = null;
            while((line = reader.readLine()) != null)
            {
                str.append(line);
            }
            in.close();
            html = str.toString();

            return html;
            } catch (ClientProtocolException es) 
            {   
                Log.e("x" , es.getMessage());
                return "";
            } catch (IOException e) 
            {
                Log.e("aasx" , e.getMessage());
                return "";
            }

        }
        @Override
        protected void onPostExecute(String response) 
        {
                String responseConverted = html2text(response);
                Log.e("tag", responseConverted);

        }
 }

我的错误日志

02-06 17:26:35.055: E/AndroidRuntime(1625): FATAL EXCEPTION: AsyncTask #2
02-06 17:26:35.055: E/AndroidRuntime(1625): java.lang.RuntimeException: An error occured while executing doInBackground()
02-06 17:26:35.055: E/AndroidRuntime(1625):     at android.os.AsyncTask$3.done(AsyncTask.java:299)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at java.util.concurrent.FutureTask.run(FutureTask.java:239)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at java.lang.Thread.run(Thread.java:856)
02-06 17:26:35.055: E/AndroidRuntime(1625): Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters. scheme=null, host=null, path=http://mtmis.punjab.gov.pk/Tax+Collection/searchNameTemp.jsp?names=j
02-06 17:26:35.055: E/AndroidRuntime(1625):     at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:591)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:293)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at com.trib.app.mtis.WebClass$TrackingNumber.doInBackground(WebClass.java:72)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at com.trib.app.mtis.WebClass$TrackingNumber.doInBackground(WebClass.java:1)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-06 17:26:35.055: E/AndroidRuntime(1625):     at java.util.concurrent.FutureTask.run(FutureTask.java:234)

【问题讨论】:

  • 你在哪里引用 arg0[0] 中的 doInBackground()?什么是urlsearch,它们在哪里定义?
  • 您不应该将这些字符串传递给AsyncTask 数组中的arg0 吗??
  • 好吧。你的代码不起作用......所以我认为这很重要。 urlsearch 在哪里定义?他们不在TrackingNumber(我看到了)
  • 无论其他问题是什么,错误日志似乎都在暗示您的“httppost”对象存在问题。它没有正确解析。我发现这可能是相关的:stackoverflow.com/questions/11272027/…

标签: java android html eclipse


【解决方案1】:

目前您正在编码整个 url,包括 host 。只需将参数而不是 url 编码为:

String str_url="http://mtmis.punjab.gov.pk/Tax%20Collection/searchNameTemp.jsp?";
String str_params="names=%s";  //<<< queryString which you want to encode
urlString =str_url+URLEncoder.encode(String.format(str_params, search), "utf-8");

【讨论】:

  • 参数很简单,目前通过 abc。如果我不对 url 进行编码,它会给出错误非法格式。检查 Tax 和 Collection 之间的空间。
  • @MuhammadUmar:然后使用%20 代替空格。查看我的编辑答案
  • 完美我更改了 %20 但仍然给出错误忘记更改 String.format。没关系它现在修复了:) ty
  • @MuhammadUmar :意味着我确定这会起作用,因为目前在您的代码中URLEncoder.encode+ sign 替换空间你也可以在日志中看到它不是有效的url,因为url 中的空格总是替换为%20 而不是 +
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多