私はAsyncTask
について読んでいて、以下の簡単なプログラムを試しました。しかし、うまくいかないようです。どうやって動かすの?
public class AsyncTaskActivity extends Activity {
Button btn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener((OnClickListener) this);
}
public void onClick(View view){
new LongOperation().execute("");
}
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
for(int i=0;i<5;i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
TextView txt = (TextView) findViewById(R.id.output);
txt.setText("Executed");
return null;
}
@Override
protected void onPostExecute(String result) {
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
}
バックグラウンドプロセスで5秒後にラベルを変更しようとしています。
これは私の main.xml :です。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >
<ProgressBar
Android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:indeterminate="false"
Android:max="10"
Android:padding="10dip">
</ProgressBar>
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Start Progress" >
</Button>
<TextView Android:id="@+id/output"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="Replace"/>
</LinearLayout>
さて、あなたは別のスレッドを通してGUIにアクセスしようとしています。これは主に、良い習慣ではありません。
AsyncTaskは別のスレッドの内側でdoInBackground()
内のすべてを実行します。これはあなたのビューがあるところのGUIへのアクセスを持っていません。
preExecute()
とpostExecute()
は、この新しいスレッドで重い作業が行われる前後にGUIへのアクセスを提供します。長い操作の結果をpostExecute()
に渡して処理結果を表示することもできます。
あなたが後であなたのTextViewを更新しているところでこれらの行を見てください:
TextView txt = (TextView) findViewById(R.id.output);
txt.setText("Executed");
それらをPostExecute()
に入れる
doInBackground
が完了した後にTextViewテキストが更新されます。
編集: 私はあなたのonClickリスナーがどのビューが選択されているか確認するためにチェックしないことに気づいた。これを行う最も簡単な方法は、switchステートメントを使用することです。私は混乱を避けるためにすべての提案を下に編集した完全なクラスを持っています。
import Android.app.Activity;
import Android.os.AsyncTask;
import Android.os.Bundle;
import Android.provider.Settings.System;
import Android.view.View;
import Android.widget.Button;
import Android.widget.TextView;
import Android.view.View.OnClickListener;
public class AsyncTaskActivity extends Activity implements OnClickListener {
Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.button1);
// because we implement OnClickListener we only have to pass "this"
// (much easier)
btn.setOnClickListener(this);
}
public void onClick(View view) {
// detect the view that was "clicked"
switch (view.getId()) {
case R.id.button1:
new LongOperation().execute("");
break;
}
}
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.interrupted();
}
}
return "Executed";
}
@Override
protected void onPostExecute(String result) {
TextView txt = (TextView) findViewById(R.id.output);
txt.setText("Executed"); // txt.setText(result);
// might want to change "executed" for the returned string passed
// into onPostExecute() but that is upto you
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
}
私の全回答は ここ ですが、これはこのページの他の回答を補足するための説明図です。私にとっては、すべての変数がどこに向かっているのかを理解することが最初のうち最も混乱しやすい部分でした。
きちんと実行されていると確信していますが、バックグラウンドスレッドでUI要素を変更しようとしているので変更できません。
次のように通話とAsyncTaskを修正します。
呼び出しクラス
注: / AsyncTaskスレッド自体を拡張するクラスではなく、AsyncTaskスレッドを実行するときはいつでもonPostExecute()
を使用することをお勧めします。特に、AsyncTaskを複数の場所で処理する必要がある場合は、結果が多少異なるため、コードが読みやすくなります。
new LongThread()
{
@Override public void onPostExecute(String result)
{
TextView txt = (TextView) findViewById(R.id.output);
txt.setText(result);
}
}.execute("");
LongThreadクラス(AsyncTaskを拡張):
@Override
protected String doInBackground(String... params) {
for(int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "Executed";
}
AndroidのAsyncTaskを使用するための簡単な例を作成しました。それはonPreExecute(), doInBackground(), publishProgress()
で始まり、最後にonProgressUpdate()
です。
この場合、doInBackground()はバックグラウンドスレッドとして機能し、他のUIスレッドでは機能します。 doInBackground()でUI要素にアクセスすることはできません。シーケンスは私が述べたのと同じです。
ただし、doInBackground
からウィジェットを更新する必要がある場合は、publishProgress
からdoInBackground
を呼び出して、UIウィジェットを更新するためにonProgressUpdate
を呼び出すことができます。
class TestAsync extends AsyncTask<Void, Integer, String>
{
String TAG = getClass().getSimpleName();
protected void onPreExecute (){
super.onPreExecute();
Log.d(TAG + " PreExceute","On pre Exceute......");
}
protected String doInBackground(Void...arg0) {
Log.d(TAG + " DoINBackGround","On doInBackground...");
for(int i=0; i<10; i++){
Integer in = new Integer(i);
publishProgress(i);
}
return "You are at PostExecute";
}
protected void onProgressUpdate(Integer...a){
super.onProgressUpdate(a);
Log.d(TAG + " onProgressUpdate", "You are in progress update ... " + a[0]);
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.d(TAG + " onPostExecute", "" + result);
}
}
あなたの活動の中でこのように呼ぶ:
new TestAsync().execute();
次の2行を移動してください。
TextView txt = (TextView) findViewById(R.id.output);
txt.setText("Executed");
asyncTaskのdoInBackground
メソッドから削除し、それらをonPostExecute
メソッドに入れます。あなたのAsyncTask
は次のようになります。
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
Thread.sleep(5000); // no need for a loop
} catch (InterruptedException e) {
Log.e("LongOperation", "Interrupted", e);
return "Interrupted";
}
return "Executed";
}
@Override
protected void onPostExecute(String result) {
TextView txt = (TextView) findViewById(R.id.output);
txt.setText(result);
}
}
非同期タスクが実行されると、タスクは4つのステップを経ます。
以下はデモの例です
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
そして一度作成すると、タスクは非常に簡単に実行されます。
new DownloadFilesTask().execute(url1, url2, url3);
私はこれがあなたを助けることを願っています...
AsyncTaskを使用すると、結果をUIスレッドに公開しながら、バックグラウンドスレッドでタスクを実行できます。
ユーザーはいつでもアプリと対話できるので、[(____)]ダウンロードなどのタスクでimportantメイン(UI)スレッドをブロックしないように Webからのコンテンツ。
これが私たちが
AsyncTask
を使う理由です。それは あなたが他のスレッドから実行可能なオブジェクトとメッセージを送って処理することを可能にするUIスレッドメッセージキューとハンドラをラッピングする による直接的なインターフェースを提供します。
AsyncTaskはジェネリッククラスです。 (コンストラクタにパラメータ化された型を取ります。)
それはこれらの3つの一般的な型:を使います
Params
- 実行時にタスクに送信されるパラメータの型.
Progress
- バックグラウンド計算中に発行されたプログレスユニットのタイプ。
Result
- バックグラウンド計算の結果の型.
すべての型が常に非同期タスクによって使用されるわけではありません。タイプを未使用としてマークするには、単にタイプVoidを使用します。
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
これらの3つのパラメータ3つの主要関数に対応あなたはAsyncTask
で上書きすることができます:
doInBackground(Params...)
onProgressUpdate(Progress...)
onPostExecute(Result)
AsyncTaskを実行する
バックグラウンドタスクに送信するパラメータを指定してexecute()
を呼び出します。
何が起こるのですか
メイン/ UIスレッドでは、onPreExecute()
が呼び出されます。 (ユーザーインターフェイスにプログレスバーを表示するなど、このスレッドで何かを初期化するため)
バックグラウンドスレッドでは、doInBackground(Params...)
が呼び出されます。 (パラメータはExecute関数に渡されるものです。)
長期実行タスクが発生する場所
AsyncTaskを使用するには、少なくともdoInBackground()
をオーバーライドする必要があります。
バックグラウンド計算がまだ実行されている間にpublishProgress(Progress...)
を呼び出して、ユーザーインターフェイスの進行状況の表示を更新します。 (例:プログレスバーをアニメートしたり、テキストフィールドにログを表示したりします。)
onProgressUpdate()
が呼び出されます。バックグラウンドスレッドでは、結果はdoInBackground()
から返されます。これで次のステップが始まります。
メイン/ UIスレッドで、返された結果を使ってonPostExecute()
が呼び出されました。
ブロッキングタスクの例をもう一度使用して、Webから何かをダウンロードします。
doInBackground()
メソッドは画像をダウンロードしてBitMap型のオブジェクトに保存します。 onPostExecute()
メソッドはビットマップを受け取り、それをImageViewに配置します。
class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bitImage;
public DownloadImageTask(ImageView bitImage) {
this.bitImage = bitImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mBmp = null;
try {
InputStream in = new Java.net.URL(urldisplay).openStream();
mBmp = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mBmp;
}
protected void onPostExecute(Bitmap result) {
bitImage.setImageBitmap(result);
}
}
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
例Bの実行
new DownloadFilesTask().execute(url1, url2, url3);
非同期的に何かをするための最短の例:
class MyAsyncTask extends Android.os.AsyncTask {
@Override
protected Object doInBackground(Object[] objects) {
//do something asynchronously
return null;
}
}
実行するには
(new MyAsyncTask()).execute();
ワーカースレッドにいるときは、Android上で直接UI要素を操作することはできません。
AsyncTaskを使用しているときは、コールバックメソッドを理解してください。
例えば:
public class MyAyncTask extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
// Here you can show progress bar or something on the similar lines.
// Since you are in a UI thread here.
super.onPreExecute();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// After completing execution of given task, control will return here.
// Hence if you want to populate UI elements with fetched data, do it here.
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
// You can track you progress update here
}
@Override
protected Void doInBackground(Void... params) {
// Here you are in the worker thread and you are not allowed to access UI thread from here.
// Here you can perform network operations or any heavy operations you want.
return null;
}
}
FYI:ワーカースレッドからUIスレッドにアクセスするには、runOnUiThread()メソッドかpostメソッドをビューに使用します。
例えば:
runOnUiThread(new Runnable() {
textView.setText("something.");
});
or
yourview.post(new Runnable() {
yourview.setText("something");
});
これはあなたが物事をよりよく知るのに役立ちます。したがって、あなたの場合、あなたはonPostExecute()メソッドであなたのtextviewを設定する必要があります。
しないで
あなたがAsyncTaskに不慣れならば、AsyncTaskを書いている間混乱するのは非常に一般的です。主な原因は、AsyncTaskで使用されるパラメータ、つまりAsyncTask<A,B,C>
です。メソッドの A、B、C(引数) シグネチャに基づいて異なるため、物事はさらに混乱します。
キーは 暗記しないでください 。あなたがあなたのタスクが本当にする必要があることを視覚化することができるならば、最初の試みで正しいシグネチャでAsyncTaskを書くことは簡単なことでしょう。あなたのインプット、進捗状況、アウトプットが何であるかを理解するだけで、うまくいくでしょう。
AsyncTaskはバックグラウンドスレッドで実行されるバックグラウンドタスクです。それは 入力 を取り、 Progress を実行し、 Output を与える。
すなわち
AsyncTask<Input,Progress,Output>
。
AsyncTask
とdoInBackground()
の間
doInBackground()
とonPostExecute(),
onProgressUpdate() `も関連しています
どのようにコードにそれを書くのですか?
DownloadTask extends AsyncTask<String,Integer,String>{
// Always same signature
@Override
public void onPreExecute()
{}
@Override
public String doInbackGround(String... params)
{
// Download code
int downloadPerc = // calculate that
publish(downloadPerc);
return "Download Success";
}
@Override
public void onPostExecute(String result)
{
super.onPostExecute(result);
}
@Override
public void onProgressUpdate(Integer... params)
{
// show in spinner, access UI elements
}
}
どのようにしてこのタスクを実行しますか?
new DownLoadTask().execute("Paradise.mp3");
私はこの作品を背景作品に使うことであなたの生活を楽にすることをお勧めします https://github.com/Arasthel/AsyncJobLibrary
これは簡単です..
AsyncJob.doInBackground(new AsyncJob.OnBackgroundJob() {
@Override
public void doOnBackground() {
startRecording();
}
});
AsyncTaskとは何ですか?
AsyncTaskは、Androidクラスで、次のような複雑な操作を実行するのに役立ちます。
開発者の緊張を緩和します
もし、あんたが
AsyncTaskはあなたにとって良い選択肢ではありません。 AsyncTaskは主に短い操作に使用されます(最大で数秒)
アプリでAsyncTaskを使用する方法
AsyncTaskはGenericsデータ型を使用します
AsyncTaskは、メソッド内でUIを更新するのに役立ちます。
これらのメソッドはメインスレッド上で動作します。それが、UI要素を更新できる理由です。
doInBackgrund() に難しいタスクを追加してください
そして execute() メソッドを使用してAsyncTaskを呼び出します。
以下の詳細なチュートリアルリンク
POST requestを使用した非同期タスクの例:
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("key1", "value1"));
params.add(new BasicNameValuePair("key1", "value2"));
new WEBSERVICEREQUESTOR(URL, params).execute();
class WEBSERVICEREQUESTOR extends AsyncTask<String, Integer, String>
{
String URL;
List<NameValuePair> parameters;
private ProgressDialog pDialog;
public WEBSERVICEREQUESTOR(String url, List<NameValuePair> params)
{
this.URL = url;
this.parameters = params;
}
@Override
protected void onPreExecute()
{
pDialog = new ProgressDialog(LoginActivity.this);
pDialog.setMessage("Processing Request...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... params)
{
try
{
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;
HttpPost httpPost = new HttpPost(URL);
if (parameters != null)
{
httpPost.setEntity(new UrlEncodedFormEntity(parameters));
}
httpResponse = httpClient.execute(httpPost);
httpEntity = httpResponse.getEntity();
return EntityUtils.toString(httpEntity);
} catch (Exception e)
{
}
return "";
}
@Override
protected void onPostExecute(String result)
{
pDialog.dismiss();
try
{
}
catch (Exception e)
{
}
super.onPostExecute(result);
}
}
単に:
LongOperation MyTask = new LongOperation();
MyTask.execute();
private class AsyncTaskDemo extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(false);
progressDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
//do code here
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
}
@Override
protected void onCancelled() {
super.onCancelled();
progressDialog.dismiss();
Toast toast = Toast.makeText(getActivity(),
"Error is occured due to some probelm", Toast.LENGTH_LONG);
toast.setGravity(Gravity.TOP, 25, 400);
toast.show();
}
}
ボタンonclicklistenerを宣言する必要があります。クリックするとAsyncTaskクラスDownloadJsonが呼び出され、そのプロセスは以下のようになります。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new DownloadJson().execute();
}
});
}
// DownloadJSON AsyncTask
private class DownloadJson extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
newlist = new ArrayList<HashMap<String, String>>();
json = jsonParser.makeHttpRequest(json, "POST");
try {
newarray = new JSONArray(json);
for (int i = 0; i < countdisplay; i++) {
HashMap<String, String> eachnew = new HashMap<String, String>();
newobject = newarray.getJSONObject(i);
eachnew.put("id", newobject.getString("ID"));
eachnew.put("name", newobject.getString("Name"));
newlist.add(eachnew);
}
}
} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args) {
newlisttemp.addAll(newlist);
NewAdapterpager newadapterpager = new NewAdapterpager(ProcesssActivitypager.this,newlisttemp);
newpager.setAdapter(newadapterpager);
}
}
下記のようにコードを変更してください。
@Override
protected void onPostExecute(String result) {
runOnUiThread(new Runnable() {
public void run() {
TextView txt = (TextView) findViewById(R.id.output);
txt.setText("Executed");
}
});
}
AsyncTaskを使用しながら、クラスサクセサを作成し、その中に必要なメソッドの実装を登録する必要があります。このレッスンでは、3つの方法を見ていきます。
doInBackground-新しいスレッドで実行されます。ここでは、すべての困難なタスクを解決します。非プライマリスレッドのため-UIにアクセスできません。
onPreExecute-doInBackgroundの前に実行され、UIにアクセスできます
onPostExecute-doInBackgroundの後に実行されます(AsyncTaskがキャンセルされた場合は機能しません-次のレッスンでこれについて)、UIにアクセスできます
このMyAsyncTaskクラス
class MyAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
tvInfo.setText("Start");
}
@Override
protected Void doInBackground(Void... params) {
//your background method
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
tvInfo.setText("Finish");
}
}
そして、これはあなたのアクティビティまたはフラグメントを呼び出す方法です
MyAsyncTask myAsyncTask = new MyAsyncTask ();
myAsyncTask.execute();
進行状況を示すサンプルAsyncTaskの例
import Android.animation.ObjectAnimator;
import Android.os.AsyncTask;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.View;
import Android.view.animation.AccelerateDecelerateInterpolator;
import Android.view.animation.DecelerateInterpolator;
import Android.view.animation.LinearInterpolator;
import Android.widget.Button;
import Android.widget.ProgressBar;
import Android.widget.TextView;
public class AsyncTaskActivity extends AppCompatActivity implements View.OnClickListener {
Button btn;
ProgressBar progressBar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(this);
progressBar = (ProgressBar)findViewById(R.id.pbar);
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.button1:
new LongOperation().execute("");
break;
}
}
private class LongOperation extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
Log.d("AsyncTask", "doInBackground");
for (int i = 0; i < 5; i++) {
try {
Log.d("AsyncTask", "task "+(i + 1));
publishProgress(i + 1);
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.interrupted();
}
}
return "Completed";
}
@Override
protected void onPostExecute(String result) {
Log.d("AsyncTask", "onPostExecute");
TextView txt = (TextView) findViewById(R.id.output);
txt.setText(result);
progressBar.setProgress(0);
}
@Override
protected void onPreExecute() {
Log.d("AsyncTask", "onPreExecute");
TextView txt = (TextView) findViewById(R.id.output);
txt.setText("onPreExecute");
progressBar.setMax(500);
progressBar.setProgress(0);
}
@Override
protected void onProgressUpdate(Integer... values) {
Log.d("AsyncTask", "onProgressUpdate "+values[0]);
TextView txt = (TextView) findViewById(R.id.output);
txt.setText("onProgressUpdate "+values[0]);
ObjectAnimator animation = ObjectAnimator.ofInt(progressBar, "progress", 100 * values[0]);
animation.setDuration(1000);
animation.setInterpolator(new LinearInterpolator());
animation.start();
}
}
}
非同期タスク。
public class MainActivity extends AppCompatActivity {
private String ApiUrl="your_api";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyTask myTask=new MyTask();
try {
String result=myTask.execute(ApiUrl).get();
Toast.makeText(getApplicationContext(),result,Toast.LENGTH_SHORT).show();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public class MyTask extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... strings) {
String result="";
HttpURLConnection httpURLConnection=null;
URL url;
try {
url=new URL(strings[0]);
httpURLConnection=(HttpURLConnection) url.openConnection();
InputStream inputStream=httpURLConnection.getInputStream();
InputStreamReader reader=new InputStreamReader(inputStream);
result=getData(reader);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
public String getData(InputStreamReader reader) throws IOException{
String result="";
int data=reader.read();
while (data!=-1){
char now=(char) data;
result+=data;
data=reader.read();
}
return result;
}
}
}