WebサービスからHTMLデータを取得するには、SyncまたはAsync HTTP Post/Getが必要です。私はこのインターネット全体を検索しますが、良い結果が得られません。
私はこの例を使用しようとしました:
しかし、それらのどれも私のために働いていません。
HttpClient
およびHttpGet
は取り消し線で、エラーは次のとおりです。
「org.Apache.http.client.HttpClientは非推奨です」
コード:
try
{
HttpClient client = new DefaultHttpClient();
String getURL = "google.com";
HttpGet get = new HttpGet(getURL);
HttpResponse responseGet = client.execute(get);
HttpEntity resEntityGet = responseGet.getEntity();
if (resEntityGet != null)
{
//do something with the response
}
}
catch (Exception e)
{
e.printStackTrace();
}
以下に投稿した例は、Android Developer Docsで見つけた例に基づいています。あなたはその例を見つけることができます [〜#〜] here [〜#〜] 、より包括的な例についてはそれを見てください。
以下を使用して、httpリクエストを行うことができます。
import Android.app.Activity;
import Android.os.AsyncTask;
import Android.os.Bundle;
import Android.util.Log;
import Android.widget.Toast;
import Java.io.IOException;
import Java.io.InputStream;
import Java.io.InputStreamReader;
import Java.io.Reader;
import Java.io.UnsupportedEncodingException;
import Java.net.HttpURLConnection;
import Java.net.URL;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new DownloadTask().execute("http://www.google.com/");
}
private class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
//do your request in here so that you don't interrupt the UI thread
try {
return downloadContent(params[0]);
} catch (IOException e) {
return "Unable to retrieve data. URL may be invalid.";
}
}
@Override
protected void onPostExecute(String result) {
//Here you are done with the task
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}
private String downloadContent(String myurl) throws IOException {
InputStream is = null;
int length = 500;
try {
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
int response = conn.getResponseCode();
Log.d(TAG, "The response is: " + response);
is = conn.getInputStream();
// Convert the InputStream into a string
String contentAsString = convertInputStreamToString(is, length);
return contentAsString;
} finally {
if (is != null) {
is.close();
}
}
}
public String convertInputStreamToString(InputStream stream, int length) throws IOException, UnsupportedEncodingException {
Reader reader = null;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[length];
reader.read(buffer);
return new String(buffer);
}
}
ニーズに合わせてコードをいじることができます
Volley を使用して、必要なものをすべて提供できます。 AsyncTaskを使用して自分でプログラムを作成する場合は、アクティビティ内にAsyncTaskを持たず、ラッパークラスに配置してコールバックを使用することをお勧めします。これにより、アクティビティがクリーンに保たれ、ネットワークコードが再利用可能になります。それは多かれ少なかれ彼らがボレーでやったことです。
**Async POST & GET request**
public class FetchFromServerTask extends AsyncTask<String, Void, String> {
private FetchFromServerUser user;
private int id;
public FetchFromServerTask(FetchFromServerUser user, int id) {
this.user = user;
this.id = id;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
user.onPreFetch();
}
@Override
protected String doInBackground(String... params) {
URL urlCould;
HttpURLConnection connection;
InputStream inputStream = null;
try {
String url = params[0];
urlCould = new URL(url);
connection = (HttpURLConnection) urlCould.openConnection();
connection.setConnectTimeout(30000);
connection.setReadTimeout(30000);
connection.setRequestMethod("GET");
connection.connect();
inputStream = connection.getInputStream();
} catch (MalformedURLException MEx){
} catch (IOException IOEx){
Log.e("Utils", "HTTP failed to fetch data");
return null;
}
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder sb = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
protected void onPostExecute(String string) {
//Do your own implementation
}
}
****---------------------------------------------------------------***
You can use GET request inn any class like this:
new FetchFromServerTask(this, 0).execute(/*Your url*/);
****---------------------------------------------------------------***
Postリクエストの場合は、connection.setRequestMethod( "GET");を変更するだけです。に
connection.setRequestMethod( "POST");