HTTP-запрос не дает результата

Помогите пожалуйста найти решение:

Если я вызову URL-адрес (ниже), сервер предоставит мне что-то вроде этого:

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

Итак, сервер предоставляет мне таблицу SQL в виде текста. Я попытался запросить это и преобразовать в строку. Но когда я запускаю приложение, строка пуста.

Правильно ли я закодировал URL?
Правильно ли я обработал запрос?

Вот URL:

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

Вот URL-адрес, опубликованный Log.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() : "";
    }
}

РЕДАКТИРОВАТЬ:

Вот пример запроса с браузером (в данном случае только строки, поэтому нет , )

введите здесь описание изображения


person Bolic    schedule 10.09.2013    source источник
comment
1. проверьте, действительно ли работает серверная часть, 2. вам следует подумать об использовании стандартизированного API, такого как JSON RPC, REST, что угодно..   -  person flx    schedule 10.09.2013
comment
да, сервер работает, я могу запросить текст через браузер.   -  person Bolic    schedule 10.09.2013
comment
извините, но это локальный сервер. добавляю картинку...   -  person Bolic    schedule 10.09.2013


Ответы (1)


Вы должны использовать стандартизированный API для передачи данных из вашего веб-сервиса, это сэкономит вам много времени и нервов при анализе вашего собственного ответа, поскольку существуют библиотеки, такие как 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
        }
        }
person Niraj Adhikari    schedule 10.09.2013