gpt4 book ai didi

java - Android - 在单独的线程上进行 HTTP GET

转载 作者:行者123 更新时间:2023-12-02 04:29:06 25 4
gpt4 key购买 nike

背景:我是安卓编程新手。我只想简单地向本地服务器发出 http get 请求。

我想向此请求传递一个名称作为参数,并希望获得 json 格式的返回。这个问题我无法在主线程上执行它。我怎样才能做到这一点?

这是我尝试过的:

主类:

itemsAdapter.add(get.getName(device.getName()));

同一文件中的单独类:

private class httpGet extends AsyncTask<Editable, Void, Integer> {
protected String doInBackground(Editable... params) {
Editable editable = params[0];
return getName(editable.toString());
}
final String getName(String btName) {
HttpResponse response = null;
String result = "";
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
URI website = new URI("http://192.168.1.105/getName.php?q=" + btName);
request.setURI(website);
response = client.execute(request);
// Convert String to json object
JSONObject json = new JSONObject(response.toString());

// get LL json object
JSONObject json_Name = json.getJSONObject("Name");

// get value from LL Json Object
name = json_Name.getString("value"); //<< get value here
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
// Do something to recover ... or kill the app.
}

return result;
}

protected void onPostExecute(Integer result) {
// here you have the result
}

我不确定这是否是完成这项任务的好方法。我也不知道该怎么调用它。

最佳答案

AsyncTask 允许您在不同的线程中执行后台操作,而无需操作线程/处理程序。

应该是这样的:

private class httpGet extends AsyncTask<ParamForDoInBackground, ParamForOnProgressUpdate, ParamForOnPostExecute> {
protected Long doInBackground(ParamForDoInBackground... urls) {
// do the request here
}

protected void onProgressUpdate(ParamForOnProgressUpdate progress) {
// if you need to show any progress of the
// request from doInBackground
}

protected void onPostExecute(ParamForOnPostExecute result) {
// this method will run when doInBackground
// is done executing
}
}

然后你可以执行AsyncTask:

new httpGet().execute(ParamForDoInBackground);

您可以使用以下内容作为引用:AndroidBackgroundProcessingAndroid Developer AsyncTask

关于java - Android - 在单独的线程上进行 HTTP GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com