今日、私が自分のサイトの新しいケーススタディを書いたとき、猫のトレーニングをしているときに、突然突然問題に遭遇しました。 プログラムコードでは、インターネットからの画像のダウンロードを実装し、SDカードに保存する必要がありました。 一見、タスクは難しくありませんでしたが、プロジェクトは突然エラーを出し始めました。
ここで小さな余談をしなければなりません。 同じバージョンの携帯電話を持っていたので、私は比較的最近Android用のプログラミングを学び始め、バージョンAndroid 2.3から始めました。 そして、同じバージョンでエミュレータ上のすべてのプロジェクトを試しました。 数か月前に、Samsung Galaxy SIIのICS(Android 4.0)のアップデートがリリースされ、新しいバージョンの新しいプロジェクトを作成し、新しいプラットフォームのケーススタディを書き直しました。 定期的に、古いプロジェクトを読み込むときに、Eclipseは取り消し線付きのコード行に遭遇しました。 この方法は時代遅れであり、ドキュメントを読み直す必要があることは明らかでした。
私の最後のケースでは、何も強調されておらず、エラーの性質は完全には明らかではありませんでした。
私のチュートリアルの1つでは、ネットワークからImageViewに画像をアップロードする同様の例を使用しました。これは、Android 2.3で以前は正常に機能していました。 興味を引くために、この例をAndroid 4.0エミュレーターで実行しました。この例が機能することを完全に確信しています。 しかし、そこにあり、この例は開始されませんでした。 例の1行を置き換える
txtUrl.setText(e.toString());
エラーの説明を得ました-android.os.NetworkOnMainThreadException。 さらに簡単でした。 この情報を手に入れてGoogleに助けを求めたところ、Android 3.0からルールが少し変わったことがわかりました。 これで、メインアクティビティストリームのネットワークリソースにアクセスできなくなりました。 したがって、新しい方法で例を再実行する必要がありました。
コードを表示 package ru.alexanderklimov.imagefrominet; import java.io.InputStream; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.ImageView; public class ImageFromInetActivity extends Activity { private ImageView imgView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imgView = (ImageView) findViewById(R.id.imgView);
修正版では、この例は機能しました。 おそらくコードはまだ改良が必要ですが、どの方向に移動する必要があるかはすでに明らかです。
確かに、企業や真面目な開発者はこの問題を認識しています。 この問題の解決策は、ドキュメントとStackOverflow.comの両方ですでに説明されています。 専門家は、メインスレッドで長時間の操作を記述しないため、問題にまったく気付きません。 私の場合、作業プロジェクトではインターネットから画像をダウンロードする必要がなかったので驚きました。しかし、ケーススタディでは、このような「間違った」コードに遭遇しました。 そして、多くのアマチュアプログラマにとって、これは頭痛の種になると考えられています。 アプリケーションがインターネットから画像またはその他のファイルのダウンロードを使用する状況を想像してください。 そして、ICSにアップグレードした一部のユーザーは、何も機能していないと不平を言い始めています。 同じ電話モデルを持つユーザーの別の部分は、すべてがうまく機能すると主張します。 問題の原因を推測することは困難です。
結論:Android 4.0での古いプロジェクトのパフォーマンスを確認してください。 昨日、AndroidとAndroid 4の異なるバージョンのデバイス
統計の更新は、すでにバージョン2.1を上回っています。 年末までに4人がバージョン2.2にも移行することを完全に認めています。 したがって、この問題について考えなければなりません。
PS問題を解決する際の実験中に、単一の動物が負傷したわけではありません。