android 使用代理出错


问题是这样的:
当使用网络是wap的时候,使用代理进行连接网络,问题是刚开始还能练上去,多练几次马上就出现错误了。 查不出什么原因。

代码中是这样调用的:

   
  public final DefaultHttpClient createHttpClient()
  
{
// Sets up the http part of the service.
final SchemeRegistry supportedSchemes = new SchemeRegistry();

// Register the "http" protocol scheme, it is required
// by the default operator to look up socket factories.
final SocketFactory sf = PlainSocketFactory.getSocketFactory();
supportedSchemes.register(new Scheme("http", sf, 80));
supportedSchemes.register(new Scheme("https",
new EasySSLSocketFactory(), 443));

// Set some client http client parameter defaults.
final HttpParams httpParams = createHttpParams();
HttpClientParams.setRedirecting(httpParams, false);
HttpClientParams.setCookiePolicy(httpParams,
CookiePolicy.BROWSER_COMPATIBILITY);
String netType = FunctionUtil.getNetType(mApplication.getBaseContext());

if (!TextUtils.isEmpty(netType) && netType.toLowerCase().equals("ok"))
{
HttpHost proxy = new HttpHost("10.0.0.172", 80);
httpParams.setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
final ClientConnectionManager ccm = new ThreadSafeClientConnManager(
httpParams, supportedSchemes);

DefaultHttpClient httpClient = new DefaultHttpClient(ccm, httpParams);
return httpClient;
}

我是这样调用的:

   
  private  String get(List<NameValuePair> olist, String action)
  
throws ParseException, IOException
{
List<NameValuePair> list = new ArrayList<NameValuePair>();
if (olist != null)
{
list.addAll(olist);
}
list.add(new BasicNameValuePair("dcode", mApplication.getDeviceId()));
list.add(new BasicNameValuePair("versionCode", String
.valueOf(mApplication.getVersionCode())));
String url = isHttpsRequest ? prdHttpsUrl : prdUrl;
if (isHttpsRequest)
{
isHttpsRequest = false;
}
HttpGet request = new HttpGet(url + action + "?"
+ URLEncodedUtils.format(list, ENCODE));
request.addHeader("Accept-Encoding", "gzip");
request.addHeader("Cookie"/* "set-commerce-cookie" */,
mApplication.getmB2CCookieId());
request.addHeader(
"User-Agent",
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16");

String result = mClient.execute(request, responseHandler);
LogSubook.d("http result", result);
return result;
}

说明:使用的地址全是域名。不是ip地址。

报错信息:

   
  08-17 11:00:00.950: ERROR/AndroidRuntime(11546): FATAL EXCEPTION: AsyncTask #5
  
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): java.lang.RuntimeException: An error occured while executing doInBackground()
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at android.os.AsyncTask$3.done(AsyncTask.java:200)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at java.lang.Thread.run(Thread.java:1019)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): Caused by: java.lang.NullPointerException
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:547)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:653)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
08-17 11:00:00.950: ERROR/AndroidRuntime(11546): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)

Androidwebview

calfn 13 years, 8 months ago

看Log,你的错误是因为NullPointerException,出现在AsyncTask的doInBackground方法里面。你可以要check一下你在doInBackground里面是不是忘记去check null就执行了一些引起crash的操作。
不过我觉得出现这个问题的根源有可能是你没有及时清理掉之前链接的信息,有可能是多线程的同步问题。

感冒的バカ answered 13 years, 8 months ago

Your Answer