public class ATActivity extends AppCompatActivity {
private TextView info;
@SuppressLint("StaticFieldLeak") @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_at);
info = findViewById(R.id.info);
findViewById(R.id.query).setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
requestData();
}
});
//requestData();
}
private String baseUrlStr = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=18679906337";
private void requestData() {
@SuppressLint("StaticFieldLeak") AsyncTask<String, Void, String> asyncTask = new AsyncTask<String, Void, String>() {
//子线程
@Override protected String doInBackground(String... strings) {
Log.i("TEST", "doInBackground " + Thread.currentThread().getName());
//执行一个请求
//需要一个String的URL
try {
URL url = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
int responseCode = urlConnection.getResponseCode();
if(responseCode == 200) {
String result = stream2String(urlConnection.getInputStream());
//返回请求回来的手机号信息
return result;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override protected void onPostExecute(String s) {
Log.i("TEST", "onPostExecute " + Thread.currentThread().getName());
info.setText(s);
}
};
asyncTask.execute(baseUrlStr, "");
}
//将字节流转换成字符
private String stream2String(InputStream is) throws IOException {
InputStreamReader isr = new InputStreamReader(is, "gbk");
BufferedReader br = new BufferedReader(isr);
StringBuilder stringBuilder = new StringBuilder();
for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()) {
stringBuilder.append(tmp);
}
return stringBuilder.toString();
}
private void read() {
//Thread + Handler;
//AsyncTask 内部是线程池 + Handler
//就是 后台做耗时操作;主线程更新UI
/*
Params:参数,执行后台操作时传递过来的参数
Progress
Result:后台操作执行结果,即在回高主线程操作时的数据
*/
/**
* 执行流程:
* execute -> doInBackground(子线程) -> (onPreExecute) -> onPostExecute(主线程)
*
* execute -> doInBackground(子线程) -publishProgress(子线程,多次)--> onProgressUpdate(主线程,多次) -> (onPreExecute) -> onPostExecute
*/
new AsyncTask<String, Void, String>(){
//后台操作参数:第一泛型指定
@Override protected String doInBackground(String... strings) {
//
//返回处理结果:第三泛型指定
return null;
}
//主线程
//参数:就是后台操作返回的数据。第三个泛型指定
@Override protected void onPostExecute(String s) {
}
/*@Override protected Void doInBackground(String... strings) {
return null;
}*/
/*@Override protected Void doInBackground(Void... voids) {
return null;
}*/
}.execute("");
new Thread().start();
## **~**~Xml布局~~ ****
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
>
<EditText
android:id="@+id/input"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="18679906337"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/query"
app:layout_constraintTop_toTopOf="parent"
/>
<Button
android:id="@+id/query"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="query"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/input"
/>
<TextView
android:id="@+id/info"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/query"
/>
</android.support.constraint.ConstraintLayout>
AsyncTask--HttpConnection
最新推荐文章于 2021-08-20 22:26:37 发布