【发布时间】:2014-09-16 16:47:58
【问题描述】:
我正在尝试借助 php 脚本获取数据。我正在使用 HttpURLConnection 和 GET 方法。这里奇怪的是问题只发生在android上。我刚刚在 eclipse for java 上尝试过它,它工作得很好。当我在本地主机上时,它也可以工作。不,我正在尝试从在线服务器获取数据,它不再工作,无论是在模拟器还是设备上。
功能如下:
public static JSONArray getData(String scriptName) {
int responseCode = -1;
JSONArray jsr = null;
try {
URL feedURL = new URL(BASE_URL + scriptName + ".php");
HttpURLConnection connection = (HttpURLConnection) feedURL.openConnection();
connection.setReadTimeout(10000/* milliseconds */);
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
InputStream inputStream = connection.getInputStream();
Reader reader = new InputStreamReader(inputStream);
int contentLength = connection.getContentLength();
char[] charArray = new char[contentLength];
reader.read(charArray);
String responseData = new String(charArray);
jsr = new JSONArray(responseData);
}
} catch (Exception e) {
Log.e(UnBunkerApplication.DEBUG_TAG, "Error : " + e.getMessage());
}
return jsr;
}
生成的错误是connection.getContentLength() 返回-1。因此,“new char[contentLength]”这一行被 catch 块捕获。 BASE_URL 常量是包含脚本的在线 url 文件夹。当它指向本地主机时,一切都很好。
这是方法调用:
public static void fillUsersListFromDataBase() {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
JSONArray dataJSON = DataBase.getData("getAllUsers");
User.fillUsers(dataJSON);
}
});
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
这里是权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.SEND_SMS" />
有什么想法吗?谢谢。
【问题讨论】:
-
你能捕捉到错误并记录下来,以便检查连接创建错误(如果有的话)吗?
-
好吧,没有可见的连接错误.. responseCode == 200。这是日志:1542-1564/be.simongenin.unbunker E/UnBunkerDebug:错误:-1。