Android:JSONDownloader 返回空字符串

标签 android

我尝试从服务器读取 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/

相关文章:

android - 最大化 AlertDialog?

android - 适用于 Android Amazon AppStore 的应用内支付

java - 应用程序崩溃后服务无法继续运行

android - 在 Scala 和 Gradle 中使用 AndroidAnnotations

android - 返回上一屏幕

Android 在 RecyclerView OnClickListener 中获取 firebase 推送 ID

Android 虚拟设备未运行

android - RelativeLayout 不执行 "match_parent"和 alignBottom

android - 动画无法解析为类型

java - Android - findViewById() 和动态设置 ID