在我的应用程序中,我可以访问Web服务器。它适用于某些手机,但在三星Galaxy进行测试时 型号 - GT-S5830i Android版本 - 2.3.6 它继续显示未知主机异常。我已经检查了浏览器中的网址是否正常工作。
private void submitUploadData(String url ,Map<String, String> param) throws IOException
{
URL siteUrl;
try {
siteUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) siteUrl.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
Set getkey = param.keySet();
Iterator keyIter = getkey.iterator();
String content = "";
for(int i=0; keyIter.hasNext(); i++) {
Object key = keyIter.next();
if(i!=0) {
content += "&";
}
content += key + "=" + param.get(key);
}
out.writeBytes(content.trim());
out.flush();
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "";
while((line=in.readLine())!=null) {
System.out.println(line);
}
in.close();
//Intent home = new Intent(SyncHttp.this,TimeAndExpensesSKActivity.class);
//startActivity(home);
db.updateTimeExported(1);
db.updateExpensesExported(1);
db.close();
db.close();
if(db.getLogCount()==0){
db.insertSyncDateDetails(getDateandTime());}
else{
db.updateSyncDateDetails(1, getDateandTime());}
} catch (MalformedURLException e) {
e.printStackTrace();
}
this.setResult(FINISH_RESULT);
db.close();
}
我已经添加了权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
我真的很困惑为什么会发生这种异常。
感谢您的帮助。
答案 0 :(得分:1)
我在三星Galaxy TAB上使用URLConnections尤其是HTTPS也经历过一些问题,但我想它可能会出现在其他型号上,因为有大量的设备具有相同的名称,但针对不同的市场和移动提供商
到目前为止,我还没有找到一种方法,因为我有很多其他问题,因此我倾向于避开URLConnection类。
我建议使用Apache HTTP Client与您的API进行通信。你可以谷歌大量使用它的例子。
另外,在查看代码时,我建议您再阅读java中的try-catch-finally块语句。在最后正确关闭连接或出现错误非常重要。
其他可能性是:
没有任何类型的活动连接(移动或wifi)
您错过了“http:// www。”在你的网址。
答案 1 :(得分:1)
我的应用也这样做了。这通常是由网络连接不稳定引起的。我所做的就是捕获这个UnknownHostException
并修改代码,如果发生UnknownHostException
,我会在几个小时的睡眠后再尝试重新获取URL。
基本算法是这样的:
private void submitUploadData(String url ,Map<String, String> param) throws IOException
{
URL siteUrl;
boolean isDataSubmitted = false;
while(!isDataSubmitted){
try {
//do your complicated http process
isDataSubmitted = true;
} catch(UnknownHostException uhe){
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
答案 2 :(得分:0)
我认为在收到输入之前在DataOutputStream上调用close()可能会关闭整个连接 - 尝试注释掉该行。
答案 3 :(得分:-1)
您是否已从手机浏览器中检查过该网址? 请记下您传递给该功能的网址,并在手机的浏览器中进行尝试。我会想到丢失/不正确的协议说明符和/或这个特定电话无法容忍的URL字符串形成问题。