0

请帮我找到解决方案:

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

"Name", "Date" "Peter", "01.01.2013" "Paul", "12.12.2012"

所以服务器为我提供了一个 SQL 表作为文本。我试图请求这个并将其转换为字符串。但是当我运行应用程序时,字符串是空的。

我对 URL 进行了正确编码吗?
我是否正确管理了请求?

这是网址:

http://IP/query.html?sql="select * from ADAnreden"

这是由 Log.d 发布的 URL:

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() : "";
    }
}

编辑:

这是浏览器的示例请求(在这种情况下只有行,所以没有 , )

在此处输入图像描述

4

1 回答 1

0

您应该使用标准化的 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
        }
        }
于 2013-09-10T10:23:13.213 回答