-1

AVObject brandObj = query.getFirst();の行にNetworkOnMainThreadExceptionのエラーが表示されました。エラーの検索を行った後、Asynctaskのようなものを使用する必要があります。しかし、それを行う方法を理解できませんでした。Androidスタジオ - オブジェクトコンストラクタのNetworkOnMainThreadException

AVObjectParseObject

public class Product { 
    Product(AVObject object) { 
     try { 
      AVObject brandObj = query.getFirst(); // this one is making network request 
     } catch (AVException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

万一I extends AsyncTask<AVObject, Void, AVObject>

その後

@Override 
protected AVObject doInBackground(AVObject... objects) { 
    return null; 
} 

でもない、私はdoInBackground

任意の提案で書くべきかわから同じですか?

+2

doInBackgroundで[android.os.NetworkOnMainThreadExceptionを修正するにはどうすればいいですか?](https://stackoverflow.com/questions/6343166/how-do-i-fix-android-os-networkonmainthreadexception) –

+0

write query.getFirst()。それはネットワーク要求をしているメソッドです。 –

+0

あなたのコードを別のタスクで実行する必要があります。 – MeknessiHamida

答えて

1

NetworkOnMainThreadExceptionは、アプリケーションがメインスレッド上でネットワーク操作を実行しようとするとスローされます( )。これは、Honeycomb SDK以上をターゲットとするアプリケーションの場合にのみ が投げられます。

UIをブロックする可能性があるため、メインスレッドでネットワークを実行することはできません。したがって、すべてを別のスレッドで実行する必要があります。

AsyncTaskは、より簡単なソリューションの1つです。 AsyncTask(いくつかのチュートリアル/ガイドに従ってください)をセットアップし、あなたのネットワークコードをdoInBackground()メソッドに入れます。これは別のスレッドで実行されます。

1

理想的には、オブジェクトのコンストラクタはディスクI/OまたはネットワークI/Oを実行しません。あなたのケースでは、そうです。

ので、new Product(...)ニーズを呼び出しているコードのすべての部分は、バックグラウンドスレッド(プレーンスレッド、RxJavaチェーン、JobIntentServiceAsyncTask、など)に入れることにします。 Product自体は変更されません。

+0

こんにちは。私は一見を得ることができるすべての記事? –

関連する問題