Android HTTP请求未提供结果

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:

请帮助我找到解决方案:

如果我调用URL(如下),服务器会向我提供如下内容:

"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等等。是的,服务器正在工作,我可以通过浏览器请求文本。对不起,这是本地服务器。我附加了一个图像。。。