gpt4 book ai didi

java - Android Http API

转载 作者:行者123 更新时间:2023-12-02 00:09:37 25 4
gpt4 key购买 nike

我正在尝试在 android 中编写 Http API。我正在使用 AsyncTask 来运行对我的 Web 服务的调用。我对更新 UI 不感兴趣,而我想要的只是在我的应用程序逻辑中使用的数据。这是我到目前为止所拥有的:

public class DataManager{
public static String result;

public DataManager ()
{

}


public String get ()
{
User user = new User ();
user.execute("http://someuri/service/users/id/21001");
return user.getResult();
}
}


public class User extends AsyncTask <String,Void,String>{

private String result;
@Override
protected String doInBackground(String... arg0)
{
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet (arg0[0]);

try
{
HttpResponse response = client.execute (get);
if (response.getStatusLine().getStatusCode () == 200)
{
HttpEntity entity = response.getEntity();
return EntityUtils.toString(entity);
}

}
catch (ClientProtocolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}


@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
this.result = result;
}

public String getResult ()
{
return result;
}

}

我希望一个典型的调用是: DataManager 管理器 = new DataManager();
字符串值 = manager.get();

但是当我运行这个时,我返回 null。造成这种情况的原因是什么以及如何重构此代码以获得所需的行为。

最佳答案

线程的整体思想是并发运行。基本上,这就是您正在做的事情:

User user = new User (); // Create User object
user.execute("http://someuri/service/users/id/21001"); // Start thread
return user.getResult(); // Return thread result

但是,在“开始”和“返回结果”之间,线程没有时间运行。

我建议使用某种回调;首先,让 get() 返回 void,并删除 return 语句。然后,您传入一些实现 YourCallback 的对象,然后从 onPostExecute() 中调用 onCallback(result)

您的调用代码将如下所示:

DataManager x = new DataManager();
x.get(new YourCallback() {
public void onCallback(String result) {
// ...
}
});

this fantastic answer中有一个更完整的例子.

关于java - Android Http API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13115652/

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