Android HTTP请求未提供结果
请帮助我找到解决方案: 如果我调用URL(如下),服务器会向我提供如下内容:Android HTTP请求未提供结果,android,androidhttpclient,Android,Androidhttpclient,请帮助我找到解决方案: 如果我调用URL(如下),服务器会向我提供如下内容: "Name", "Date" "Peter", "01.01.2013" "Paul", "12.12.2012" 因此,服务器向我提供了一个SQL表作为文本。我试图请求这个并将其转换为字符串。但是当我运行应用程序时,字符串是空的 我的URL编码正确吗? 我处理好请求了吗 以下是网址: http://IP/query.html?sql="select * from ADAnreden" 下面是日志发布的URL。d:
"Name", "Date" "Peter", "01.01.2013" "Paul", "12.12.2012"
因此,服务器向我提供了一个SQL表作为文本。我试图请求这个并将其转换为字符串。但是当我运行应用程序时,字符串是空的
我的URL编码正确吗?我处理好请求了吗 以下是网址:
http://IP/query.html?sql="select * from ADAnreden"
下面是日志发布的URL。d:
http://IP/query.html?sql=%22select+*+from+ADAnreden%22
这是我的密码:
import java.io.BufferedInputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import android.util.Log;
public class Reader {
private String result = "leer";
String strUrl = "getURL: fehlgeschlagen";
private HttpURLConnection urlConnection;
public String getStringFromServer(){
String ip = "XYZ";
try {
String query = URLEncoder.encode("\"select * from ADAnreden\"", "utf-8");
strUrl = "http://"+ip+"/query.html?sql=" + query;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d(PACKAGE_NAME, "After getURL"+strUrl);
Thread thread = new Thread()
{
@Override
public void run() {
try {
URL url = new URL(strUrl);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
result = convertStreamToString(in);
} catch (Exception e) {
e.printStackTrace();
} finally {
urlConnection.disconnect();
}
}
};
thread.start();
return result;
}
static String convertStreamToString(java.io.InputStream is) {
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
return s.hasNext() ? s.next() : "";
}
}
编辑:
这是一个带有浏览器的示例请求(在本例中,只有行,因此没有、)
您应该使用标准api从Web服务传输数据,这将为您在解析自己的响应时节省大量时间和挫折,因为有像GSON这样的库。。。例如,它可以将JSON对象转换为JAVA对象 使用asynctask类适合于执行您试图执行的操作。下面的示例包括使用asynctask类解决问题的方法
private void getString() {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "UTF-8"));
sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
//parse your data here
}
class getterThread extends AsyncTask<Void, Void, Void> {
private ProgressDialog progressDialog = new ProgressDialog(Ingolist.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog.setMessage("Loading data from server...");
progressDialog.show();
progressDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
getterThread.this.cancel(true);
}
});
}
@Override
protected Void doInBackground(Void... params) {
getString();
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
progressDialog.dismiss();
// Update UI here
}
}
private void getString(){
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(url);
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
is=entity.getContent();
}捕获(例外e){
e、 printStackTrace();
}
试一试{
BufferedReader reader=新的BufferedReader(新的InputStreamReader(
是“UTF-8”);
sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
结果=sb.toString();
}捕获(例外e){
e、 printStackTrace();
}
//在这里解析数据
}
类getterThread扩展了AsyncTask{
private ProgressDialog ProgressDialog=新建ProgressDialog(Ingolist.this);
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
setMessage(“正在从服务器加载数据…”);
progressDialog.show();
progressDialog.setOnCancelListener(新的OnCancelListener(){
@凌驾
public void onCancel(对话框接口arg0){
getterThread.this.cancel(true);
}
});
}
@凌驾
受保护的Void doInBackground(Void…参数){
getString();
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
progressDialog.disclose();
//在此处更新用户界面
}
}
1。检查服务器端是否真的工作正常,2。您应该考虑使用标准化的API,如JSON RPC、REST等等。是的,服务器正在工作,我可以通过浏览器请求文本。对不起,这是本地服务器。我附加了一个图像。。。