我正在学习在 Android 中为我的应用程序进行 HTTP 客户端连接,但我遇到了问题。我在 New Boston letter for letter 上按照教程进行了操作,但它似乎仍然不起作用。我可以在设备顶部的状态栏中看到它正在获取数据,但没有任何返回。
理想情况下,此时我需要连接到服务器上的 api.php 文件并向其发送一个登录命令(然后使用登录命令返回的密钥发送一个 post 命令)。
我知道我必须构建一个 URI 才能传递给 HttpPost,但那时我迷路了……我运行的示例应用程序不会像教程中那样返回数据。
我已将清单设置为允许 INTERNET 访问。
这是教程中的代码(它使用 HttpGet,但一旦我弄清楚它为什么不起作用,我就可以翻译成 HttpPost)。
public String getInternetData() throws Exception {
BufferedReader in = null;
String data = "did this work";
try {
HttpClient client = new DefaultHttpClient();
URI website = new URI("http://www.longship.ca");
HttpGet request = new HttpGet();
request.setURI(website);
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity()
.getContent()));
StringBuffer sb = new StringBuffer("");
String l = "";
String nl = System.getProperty("line.separator");
while ((l = in.readLine()) != null) {
sb.append(l + nl);
}
in.close();
data = sb.toString();
return data;
} finally {
if (in != null) {
try {
in.close();
return data;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
我已经添加了主 java 文件中的代码,就像我在评论中所说的那样。被调用的类称为“GetMethodEx.java”。
公共类 HttpTest 扩展 Activity {
TextView tvResponse;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.webtest);
tvResponse = (TextView) findViewById(R.id.tvHttp);
GetMethodEx gme = new GetMethodEx();
String returned;
try {
tvResponse.setText("Getting Data");
returned = gme.getInternetData();
tvResponse.setText(returned);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("MyLogTag", "Exception in getInternetData", e);
}
}
}