我正在建立服务器连接,我的问题是我需要在我的代码上添加AsyncTask
,因为它不能在sdk版本10
中运行。我不想使用StrictMode.ThreadPolicy
。
public class TestConnection extends Activity {
@Override
public void onCreate(Bundle cbundle) {
super.onCreate(cbundle);
ConnectivityManager aConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo aNetworkInfo = aConnectivityManager.getActiveNetworkInfo();
if (aNetworkInfo != null && aNetworkInfo.isConnected()){
Toast.makeText(this, "Internet Connected", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this, "Internet Connection Timeout", Toast.LENGTH_LONG).show();
}
URL aURL;
/* Will be filled and displayed later. */
String aString = null;
/* We will show the data we read in a TextView. */
TextView aTextView = new TextView(this);
try {
/* Define the URL we want to load data from. */
aURL = new URL(
"http://url");
/* Open a connection to that URL. */
final HttpURLConnection aHttpURLConnection = (HttpURLConnection) aURL.openConnection();
/* Define InputStreams to read from the URLConnection. */
InputStream aInputStream = aHttpURLConnection.getInputStream();
BufferedInputStream aBufferedInputStream = new BufferedInputStream(
aInputStream);
/* Read bytes to the Buffer until there is nothing more to read(-1) */
ByteArrayBuffer aByteArrayBuffer = new ByteArrayBuffer(50);
int current = 0;
while ((current = aBufferedInputStream.read()) != -1) {
aByteArrayBuffer.append((byte) current);
}
/* Convert the Bytes read to a String. */
aString = new String(aByteArrayBuffer.toByteArray());
} catch (Exception aException) {
/* On any Error we want to display it. */
aString = aException.getMessage();
}
/* Show the String on the GUI. */
aTextView.setText(aString);
this.setContentView(aTextView);
}
}
答案 0 :(得分:3)
private class ConnectionTask extends AsyncTask<String, Void, String>{
@Override
protected byte[] doInBackground(String... urls) {
try {
aURL = new URL(
urls[0]);
/* Open a connection to that URL. */
final HttpURLConnection aHttpURLConnection = (HttpURLConnection) aURL.openConnection();
/* Define InputStreams to read from the URLConnection. */
InputStream aInputStream = aHttpURLConnection.getInputStream();
BufferedInputStream aBufferedInputStream = new BufferedInputStream(
aInputStream);
/* Read bytes to the Buffer until there is nothing more to read(-1) */
ByteArrayBuffer aByteArrayBuffer = new ByteArrayBuffer(50);
int current = 0;
while ((current = aBufferedInputStream.read()) != -1) {
aByteArrayBuffer.append((byte) current);
}
/* Convert the Bytes read to a String. */
aString = new String(aByteArrayBuffer.toByteArray()); } catch (IOException e) {
Log.d(TAG, e.toString());
}
return aString;
}
@Override
protected void onPostExecute(String result) {
// result is what you got from your connection
aTextView.setText(result);
}
}
如何称呼它:
ConnectionTask task = new ConnectionTask();
String[] params = new String[2];
params[0] = url;
params[1] = somethingelseifneeded;
task.execute(params);
答案 1 :(得分:1)
在oncreate()中你可以像这样使用::
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
StrictMode.ThreadPolicy policy = new
StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
new MyAsynTask().execute(null, null, null);
}
然后在AsynTask中也这样做::
class MyAsynTask extends AsyncTask<Long, Integer, Integer> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected <Type> doInBackground(Long... params) {
URL ur_url = newURL(http://....)
// do the works on url.....
return <tuped>result;
}
@Override
protected void onPostExecute(Integer result) {
// set the results in Ui
}
}
答案 2 :(得分:0)
参考下面的代码
new FetchRSSFeeds().execute();
private class FetchRSSFeeds extends AsyncTask<String, Void, Boolean> {
private ProgressDialog dialog = new ProgressDialog(HomeActivity.this);
/** progress dialog to show user that the backup is processing. */
/** application context. */
protected void onPreExecute() {
this.dialog.setMessage(getResources().getString(
R.string.Loading_String));
this.dialog.show();
}
protected Boolean doInBackground(final String... args) {
try {
/**
* Write your URL connection code and fetch data here
*/
return true;
} catch (Exception e) {
Log.e("tag", "error", e);
return false;
}
}
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
/* Show the String on the GUI. */
aTextView.setText(aString);
this.setContentView(aTextView);
}
}