我正在寻找一些关于代码中的错误的帮助。我正在从头开始为我的Android应用程序编写一个HTTP请求处理程序,它工作正常,但我在分割POST
和GET
的不同部分时遇到问题。它们有一些相同的逻辑,所以我试图将它保持为一个if
子句。我正在扩展AsyncTask
所以我有doInBackground
和onPostExecute
方法来处理实际请求,然后分别处理结果。我正在测试的请求是GET
请求。
构造
public <T extends Exhibitable> HTTPRequestHandler(T exhibiter, String verb, String url) throws MalformedURLException {
this.exhibiter = exhibiter;
this.verb = verb;
this.url = url;
try {
mUrlConnection = new URL(url).openConnection();
mUrlConnection.setDoInput(true);
mUrlConnection.setDoOutput(true);
mUrlConnection.setUseCaches(false);
} catch (MalformedURLException e) {
Log.e("Debug", "MalformedURLException", e);
} catch (IOException e) {
Log.e("Debug", "IOException1", e);
}
}
exhibitor
只是为了在我的onPostExecute
方法中,我可以调用它的命令并让它以我想要的方式显示我的数据。
问题代码
我的doInBackground
方法是我遇到错误的地方。我想要
protected String doInBackground(String... params) {
String tmp;
try {
mUrlConnection.connect();
this.in = new DataInputStream(mUrlConnection.getInputStream());
this.out = new DataOutputStream(mUrlConnection.getOutputStream());
if(verb.equalsIgnoreCase("POST")){
out.write(requestParams.toString().getBytes("UTF-8"));
}
while((tmp = in.readLine()) !=null){
mStringBuffer.append(tmp);
}
}catch (IOException e){
e.printStackTrace();
}
return mStringBuffer.toString();
}
我得到一个JSONException: Expected literal value...
它实际上似乎并没有获取数据。
onPostExecute
public void onPostExecute(String result){
super.onPostExecute(result);
Log.d("Debug", "Result is: "+result);
try {
exhibiter.exhibit(new JSONObject("{'result':"+result+"}"));
}catch (JSONException e){
Log.e("Debug", "JSONException", e);
}
}
的作用是以下代码。
工作请求
protected String doInBackground(String... uri)
if(verb.equalsIgnoreCase("GET")){
try {
while((tmp = in.readLine()) !=null){
mStringBuffer.append(tmp);
}
}catch (IOException e){
Log.e("Debug", "IOException2", e);
}
}else if(verb.equalsIgnoreCase("POST")){
try {
while((tmp = in.readLine()) !=null){
mStringBuffer.append(tmp);
}
out.flush();
out.close();
}catch (IOException e){
Log.e("Debug", "IOException3", e);
}
}else{
return "No valid request specified.";
}
return mStringBuffer.toString();
}
这取决于我在服务器上获得的结果 - 它给了我想要的东西,但它不是很干。什么给出了什么?这些似乎与我完全相同。唯一真正不同的是,在工作块中,我给mStringBuffer.append(tmp);
自己的try catch
块。我已经尝试将其插入所需的代码块,但它仍然无法正常工作。那么我对AsyncTask
还缺少什么?