Проблемы при подключении к серверу Pandorbot в Android

Я пытаюсь сделать чат-бота в Android. Итак, я пытаюсь подключить пандоработ с моим приложением для Android.

public class Brain {
    public String defaultCustid = "0";
    public String custid = defaultCustid;
    public String responseFailed = "RESPONSE FAILED";
    public String defaultBotId = "da43c986ee34039e";
    public String defaultHost = "http://www.pandorabots.com";
    String botResponse;

    public String askPandorabots(String input) {
        return askPandorabots(input, defaultHost, defaultBotId);
    }
    public String askPandorabots(String input, String host, String botid) {
        String responseContent = pandorabotsRequest(input, host, botid);
        if (responseContent == null) 
            return responseFailed;
        else 
            return pandorabotsResponse(responseContent, host, botid);
    }

    public String pandorabotsRequest(String input, String host, String botid) {
        try {
            String spec = spec(host, botid, custid, input);
            return responseContent(spec);
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public String spec(String host, String botid, String custid, String input) {
        String spec = "";
        try {
            if (custid.equals("0"))      // get custid on first transaction with Pandorabots
                spec =    String.format("%s?botid=%s&input=%s",
                        "http://" + host + "/pandora/talk-xml",
                        botid,
                        URLEncoder.encode(input, "UTF-8"));
            else spec =                 // re-use custid on each subsequent interaction
                    String.format("%s?botid=%s&custid=%s&input=%s",
                            "http://" + host + "/pandora/talk-xml",
                            botid,
                            custid,
                            URLEncoder.encode(input, "UTF-8"));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return spec;
    }

    public String responseContent(String url) throws Exception {
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet();
        request.setURI(new URI(url));
        InputStream is = client.execute(request).getEntity().getContent();
        BufferedReader inb = new BufferedReader(new InputStreamReader(is));
        StringBuilder sb = new StringBuilder("");
        String line;
        String NL = System.getProperty("line.separator");
        while ((line = inb.readLine()) != null) {
            sb.append(line).append(NL);
        }
        inb.close();
        return sb.toString();
    }
}

Это код, который я использую для подключения. Но бот всегда отвечает "Response Failed".

String responseContent = pandorabotsRequest(input, host, botid);

if (responseContent == null) 
    return responseFailed;
else 
    return pandorabotsResponse(responseContent, host, botid);

Здесь значение responseContent становится нулевым, поэтому отображается "Ошибка ответа". Я просматривал цитату несколько раз, но не могу понять, почему в responseContent значение равно нулю. Может кто-нибудь более знающий, чем я, пожалуйста, просмотрите код и укажите, где я делаю ошибку?

3 ответа

У меня была такая же проблема, вот исправление:

Java выдает исключение android.os.NetworkOnMainThreadException глубоко в HttpGet()

Это потому, что вы пытаетесь выполнить сетевую операцию в главном потоке

добавьте эти две строки в ваш manifest.xml

добавить этот оператор импорта в вашу основную деятельность

import android.os.StrictMode;

добавьте эти 2 строки кода к вашей основной деятельности в метод onCreate()

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder(). AllowAll (). Build(); StrictMode.setThreadPolicy(политика);

и тебе должно быть хорошо идти!

Сделайте HTTP-запрос от нового потока.

Это должно решить NetworkOnMainThreadException.

Теперь, чтобы обновить что-либо в потоке пользовательского интерфейса, используйте Handler.

Java выбрасывает исключение android.os.NetworkOnMainThreadException глубоко в HttpGet()

Это потому, что вы пытаетесь выполнить сетевую операцию в главном потоке

добавьте эти две строки к вашему manifest.xml

uses-permission android:name="android.permission.INTERNET" 
uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" 

добавить этот оператор импорта в вашу основную деятельность

import android.os.StrictMode;     

добавьте эти 2 строки кода к вашей основной деятельности в onCreate() метод

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Другие вопросы по тегам