gpt4 book ai didi

java - XML-RPC 错误,org.xmlpull.v1.XmlPullParserException

转载 作者:行者123 更新时间:2023-11-30 03:10:24 25 4
gpt4 key购买 nike

我正在尝试在 Android 中制作一个应用程序聊天机器人。我使用 Pandorabots 作为聊天机器人服务器。在设备 Android 与服务器之间进行连接。我使用 pandorabot XML-RPC API,我使用来自 android-xmlrpc 的 xml-rpc 库.所以这是我的代码:

public class MainActivity extends Activity {
private EditText editOne;
private TextView textOne;
private Button ButtonOne;
private XMLRPCClient server;
private URI uri;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}

uri = URI.create("http://www.pandorabots.com/pandora/talk-xml?botid=e80e92407e341007");
server = new XMLRPCClient(uri);
editOne = (EditText) findViewById(R.id.editText1);
textOne = (TextView) findViewById(R.id.textView1);
ButtonOne = (Button) findViewById(R.id.button1);

textSatu.setText(getDataMethod("hi"));
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


private String getDataMethod(String num) {
String text = "";
try {
Log.w("Running server.call", "prosess");
Object[] data = (Object[]) server.call("input", num);
Log.w("server.call Run", "finish");
Log.w("Run HashMap", "prosess");
for(Object o: data) {
HashMap map = (HashMap) o;
Log.w("HashMap Berjalan", "Error");
text = text + "'that' => " + map.get("that") + "\n\n";
}
} catch (XMLRPCException e) {
Log.w("XMLRPC Test", "Error", e);
text = "XMLRPC error";
}
return text;
}


}

但是我得到了错误。据说:org.xmlpull.v1.XmlPullParserException: expected: START_TAG {null}methodResponse (position:START_TAG @1:45 in java.io.InputStreamReader@41174280)

谁能帮帮我?请。

最佳答案

这是一个不需要 XMLRPCClient 的解决方案。重要的是在与机器人的第一次交互中捕获客户 ID,然后在每次后续交易中发回 custid 的值。机器人使用 custid 来记住与对话线程关联的局部变量,例如姓名、年龄、性别、主题等。

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URLEncoder;
public class PandorabotsTalkAPI {
public String defaultCustid = "0";
public String custid = defaultCustid;
public String responseFailed = "RESPONSE FAILED";
public String defaultBotId = "f5d922d97e345aa1";
public String defaultHost = "www.pandorabots.com";
public String askPandorabots(String input) {
return askPandorabots(input, defaultHost, defaultBotId);
}
public String askPandorabots(String input, String host, String botid) {
//System.out.println("Entering askPandorabots with input="+input+" host ="+host+" botid="+botid);
String responseContent = pandorabotsRequest(input, host, botid);
if (responseContent == null) return responseFailed;
else return pandorabotsResponse(responseContent, host, botid);
}
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();
}


public String spec(String host, String botid, String custid, String input) {
//System.out.println("--> custid = "+custid);
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();
}
//System.out.println(spec);
return spec;
}

public String pandorabotsRequest(String input, String host, String botid) {
try {

String spec = spec(host, botid, custid, input);
//System.out.println("Spec = "+spec);
String responseContent = responseContent(spec);
return responseContent;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
public String pandorabotsResponse (String xmlRpcResponse, String host, String botid) {
String botResponse = responseFailed;
try {
int n1 = xmlRpcResponse.indexOf("<that>");
int n2 = xmlRpcResponse.indexOf("</that>");

if (n2 > n1)
botResponse = xmlRpcResponse.substring(n1+"<that>".length(), n2);
n1 = xmlRpcResponse.indexOf("custid=");
if (n1 > 0) {
custid = xmlRpcResponse.substring(n1+"custid=\"".length(), xmlRpcResponse.length());
n2 = custid.indexOf("\"");
if (n2 > 0) custid = custid.substring(0, n2);
else custid = defaultCustid;
}
if (botResponse.endsWith(".")) botResponse = botResponse.substring(0, botResponse.length()-1); // snnoying Pandorabots extra "."
} catch (Exception ex) {
ex.printStackTrace();
}
return botResponse;
}

}

关于java - XML-RPC 错误,org.xmlpull.v1.XmlPullParserException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21094698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com