Android下載檔案常見錯誤解決方案,android常見錯誤

來源:互聯網
上載者:User

Android下載檔案常見錯誤解決方案,android常見錯誤

最近在學習Mars老師的Android開發課程,仿照http://www.cnblogs.com/Laupaul/archive/2012/02/12/2348293.html的代碼來寫應用,結果中間出了各種各樣的問題,在這裡總結一下:

1.  java.lang.NullPointerException報錯, android.os.NetworkOnMainThreadException異常

原因:urlCon.getInputStream()執行的時候出錯導致,得不到InputStream。這個異常大概意思是在主線程訪問網路時出的異常。 造成這樣的錯誤原因是代碼不符合Android規範,Android在4.0之前的版本支援在主線程中訪問網路,但是在4.0以後對這部分程式進行了最佳化,也就是說訪問網路的代碼不能寫在主線程中了。

解決辦法:

改用多線程,非同步載入的方式:

    String lrc;    Handler handler = new Handler() {        public void handleMessage(Message msg) {            if(msg.what == 0x123) {                System.out.println(lrc);            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_download);        downloadTxtButton = (Button)findViewById(R.id.downloadTxt);        downloadMp3Button = (Button)findViewById(R.id.downloadMp3);        textview = (TextView)findViewById(R.id.textview);        downloadTxtButton.setOnClickListener(new View.OnClickListener() {            public void onClick(View view) {                new Thread() {                    public void run() {                        HttpDownloader httpDownloader = new HttpDownloader();                        lrc = httpDownloader.download("http://127.0.0.1/android_download/white_black.lrc");                        handler.sendEmptyMessage(0x123);                        textview.setText(lrc);                    }                }.start();            }        });    }


2. android從tomcat讀取檔案出錯: connect failed: ECONNREFUSED

本地啟tomcat,當想讓android從本機伺服器上下載檔案時,url中IP地址寫127.0.0.1或localhost在模擬器中無效:

W/System.err(12527): java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 8080): connect failed: ECONNREFUSED (Connection refused)

改為原生IP地址也顯示無法串連,終於在網上找到一個非常簡便的方式:android把127.0.0.1當作模擬器本機,而把電腦本地IP設為10.0.2.2,所以只需要把需串連本機電腦web服務地址改為:http://10.0.2.2即可。

3. Only the original thread that created a view hierarchy can touch its views報錯

Android的相關View和控制項不是安全執行緒的,從報錯資訊可以得知只能由產生View的線程對它做改變,因此將textview.setText(lrc);放到handleMessage()裡即可。

4. 寫檔案到SD卡時出錯: java.io.IOException: open failed: EACCES (Permission denied)Manifest裡也配置了許可權

<uses-permission android:name="android.permission.INTERNET"/>  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 


原因是模擬器的SD卡大小沒有設定,在AVD Manager裡將模擬器的SD卡size設定一下,再跑就沒問題了。


經過一番折騰,終於出了結果:

目前還是新手,所以出了問題就各種不知所措,經驗還是需要慢慢積累的~


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.