Проблемы при подключении к серверу 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);