我尝试从服务器读取 JSON 文件,但是当我将此 URL 传递给它时,它不会返回 JSON 对象, 并且没有发生错误或异常,只是返回空字符串,我不想要这个,
这是测试的 URL:http://famila1.ir/khabgah/get_khabgah_cash.php
这是我的 list 文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aqamamad.myapplication">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
代码如下:
public class JSONDownloader
{
public String downloadURL( String strUrl )
{
String data = "";
try
{
URL url = new URL( strUrl );
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setReadTimeout(10000);
connection.setConnectTimeout(15000);
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
InputStream myStream = connection.getInputStream();
BufferedReader br = new BufferedReader( new InputStreamReader( myStream ) );
StringBuilder sb = new StringBuilder();
String line;
while ( ( line = br.readLine() ) != null )
{
sb.append( line );
}
data = sb.toString();
br.close();
connection.disconnect();
myStream.close();
}
catch ( Exception e )
{
/*
*Log.i( "MatiMessage" , "error in JSONDownloader in downloadURL() -> " + e.toString() );
*/
}
return data;
}
}
有人知道这段代码的问题吗?
最佳答案
public void getContent(String url) {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) new URL(url).openConnection();
} catch (IOException e) {
e.printStackTrace();
}
if (conn != null) {
conn.setRequestProperty("Accept", "application/json,text/html");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Cookie", "");
try {
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,
"UTF-8"));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
br.close();
is.close();
conn.disconnect();
return sb.toString();
} catch (SocketException e) {// connection reset
Log.d(TAG, "SocketException: " + e);
return null;
} catch (Exception e) {// connection reset
Log.d(TAG, "Exception: " + e);
return null;
}
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// You get the result here
}
}.execute(null, null, null);
}
Http连接被认为是耗时 Action ,所以你需要把它放在另一个线程而不是UI线程
关于Android:JSONDownloader 返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52441567/