Java Android HttpClient异步任务
我已经在这个问题上纠缠了一两天了,所以我决定看看是否有人能帮我 我目前的目标是制作一个连接到Wamp服务器并执行其脚本的HttpPost。我实现了一个扩展AsyncTask的类,它包括3个必要的方法,这些方法是AsyncTask有效工作所必需的 我将首先向您展示用于将变量放入Json对象的代码,然后是初始化HttpPost的Java Android HttpClient异步任务,java,android,json,android-asynctask,httpclient,Java,Android,Json,Android Asynctask,Httpclient,我已经在这个问题上纠缠了一两天了,所以我决定看看是否有人能帮我 我目前的目标是制作一个连接到Wamp服务器并执行其脚本的HttpPost。我实现了一个扩展AsyncTask的类,它包括3个必要的方法,这些方法是AsyncTask有效工作所必需的 我将首先向您展示用于将变量放入Json对象的代码,然后是初始化HttpPost的JSONParser类,然后执行它。 之后,我会告诉你所有关于日志错误和缩小问题范围的信息;你们都知道问题可能是什么,如果不想阅读下面的内容,简单地说,它是由调用解析器类的代
JSONParser
类,然后执行它。之后,我会告诉你所有关于日志错误和缩小问题范围的信息;你们都知道问题可能是什么,如果不想阅读下面的内容,简单地说,它是由调用解析器类的代码行引起的 注意:我使用它作为这类工作的起点,因此请理解它在传递参数方面很简单 进一步注意:我正在使用Eclipse,并且正在使用内置仿真器进行测试 方法-CreateNewUser
/**
* Background Async Task to Create new user
*/
class CreateNewUser extends AsyncTask<String, String, String>{
/**
* Before starting background thread show progress dialog
*/
@Override
protected void onPreExecute(){
super.onPreExecute();
pDialog = new ProgressDialog(AddUserActivity.this);
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/*
* Creating user
*/
@Override
protected String doInBackground(String... args){
String username = inputUsername.getText().toString();
String password = inputPassword.getText().toString();
// Building parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("username", username));
params.add(new BasicNameValuePair("password", password));
// getting JSON object
// Note that create user url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url_create_user, "POST",params);
// check log cat for response
Log.d("Create Response", json.toString());
// check for success tag
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully created product
Intent i = new Intent(getApplicationContext(), MainActivity.class);
startActivity(i);
// closing this screen
finish();
} else {
// failed to create product
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
@Override
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.dismiss();
}
}
据我所知,脚本文件本身可以工作——此外,根据我所知,程序从不执行脚本
如果有人能帮我,我会非常感激的!我知道你们都是很忙的人,所以非常感谢你们抽出一天的时间来发表想法:)线索在抛出的异常中: 原因:java.lang.IllegalStateException:目标主机不能为 null,或在参数中设置。scheme=null,host=null,
path=localhost/android\u connect/sqlconfig/create\u user.php
我猜这是一个编码问题,您是否在URL的开头正确地包含了“http://”,是否已将您请求的URL打印到LogCat以确保它看起来正确 线索在抛出的异常中: 原因:java.lang.IllegalStateException:目标主机不能为 null,或在参数中设置。scheme=null,host=null,
path=localhost/android\u connect/sqlconfig/create\u user.php
我猜这是一个编码问题,您是否在URL的开头正确地包含了“http://”,是否已将您请求的URL打印到LogCat以确保它看起来正确 线索在抛出的异常中: 原因:java.lang.IllegalStateException:目标主机不能为 null,或在参数中设置。scheme=null,host=null,
path=localhost/android\u connect/sqlconfig/create\u user.php
我猜这是一个编码问题,您是否在URL的开头正确地包含了“http://”,是否已将您请求的URL打印到LogCat以确保它看起来正确 线索在抛出的异常中: 原因:java.lang.IllegalStateException:目标主机不能为 null,或在参数中设置。scheme=null,host=null,
path=localhost/android\u connect/sqlconfig/create\u user.php
我猜这是一个编码问题,您是否在URL的开头正确地包含了“http://”,是否已将您请求的URL打印到LogCat以确保它看起来正确 url是否指向某个
localhost
对象?是的,这是异步任务失败的原因吗?我已经将url的ip设置为127.0.0.1。连接到localhost wamp服务器是否存在一般性问题?如果您在内置仿真器中进行测试,则应使用10.0.2.2连接到localhost。@polska指的是:--当未设置INTERNET
权限时,我也看到类似错误。@323go,确切地说,我也看到了与此相关的错误。。实际上,当我尝试user3149699正在尝试的事情时,我的一个问题是没有设置INTERNET权限。url是否指向某个localhost
东西?是的,这是异步任务失败的原因吗?我已经将url的ip设置为127.0.0.1。连接到localhost wamp服务器是否存在一般性问题?如果您在内置仿真器中进行测试,则应使用10.0.2.2连接到localhost。@polska指的是:--当未设置INTERNET
权限时,我也看到类似错误。@323go,确切地说,我也看到了与此相关的错误。。实际上,当我尝试user3149699正在尝试的事情时,我的一个问题是没有设置INTERNET权限。url是否指向某个localhost
东西?是的,这是异步任务失败的原因吗?我已经将url的ip设置为127.0.0.1。连接到localhost wamp服务器是否存在一般性问题?如果您在内置仿真器中进行测试,则应使用10.0.2.2连接到localhost。@polska指的是:--当未设置INTERNET
权限时,我也看到类似错误。@323go,确切地说,我也看到了与此相关的错误。。实际上,当我尝试user3149699正在尝试的事情时,我的一个问题是没有设置INTERNET权限。url是否指向某个localhost
东西?是的,这是异步任务失败的原因吗?我已经将url的ip设置为127.0.0.1。连接到localhost wamp服务器是否存在一般性问题?如果您在内置仿真器中进行测试,则应使用10.0.2.2连接到localhost。@polska指的是:--当未设置INTERNET
权限时,我也看到类似错误。@323go,确切地说,我也看到了与此相关的错误。。事实上,当我尝试与user3149699相同的东西时,我的一个问题是没有设置INTERNET权限。非常好的捕获。我注销了url,你是对的,我没有把http://放在它的前面。之后,我仍然有日志错误,但我感觉好像我离那个问题越来越近了。我没有那个非法移民
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get JSON from URL
// by making HTTP POST or GET method
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if(method == "POST"){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method == "GET"){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
E/AndroidRuntime(1132): FATAL EXCEPTION: AsyncTask #2
E/AndroidRuntime(1132): Process: com.example.propertypanther, PID: 1132
E/AndroidRuntime(1132): java.lang.RuntimeException: An error occured while executing
doInBackground()
E/AndroidRuntime(1132): at android.os.AsyncTask$3.done(AsyncTask.java:300)
E/AndroidRuntime(1132): at
java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
E/AndroidRuntime(1132): at
java.util.concurrent.FutureTask.setException(FutureTask.java:222)
E/AndroidRuntime(1132): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
E/AndroidRuntime(1132): at
android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime(1132): at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime(1132): at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime(1132): at java.lang.Thread.run(Thread.java:841)
E/AndroidRuntime(1132): Caused by: java.lang.IllegalStateException: Target host must not
be null, or set in parameters. scheme=null, host=null,
path=localhost/android_connect/sqlconfig/create_user.php
E/AndroidRuntime(1132): at
org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.jav
a:591)
E/AndroidRuntime(1132): at
org.apache.http.impl.client.DefaultRequestDirector.execute
(DefaultRequestDirector.java:293)
E/AndroidRuntime(1132): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
E/AndroidRuntime(1132): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
E/AndroidRuntime(1132): at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
E/AndroidRuntime(1132): at
com.example.propertypanther.JSONParser.makeHttpRequest(JSONParser.java:51)
E/AndroidRuntime(1132): at
com.example.propertypanther.AddUserActivity$CreateNewUser.doInBackground
(AddUserActivity.java:116)
E/AndroidRuntime(1132): at
com.example.propertypanther.AddUserActivity$CreateNewUser.doInBackground
(AddUserActivity.java:1)
E/AndroidRuntime(1132): at android.os.AsyncTask$2.call(AsyncTask.java:288)
E/AndroidRuntime(1132): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime(1132): ... 4 more
I/Choreographer(1132): Skipped 82 frames! The application may be doing too much work on
its main thread.
I/Choreographer(1132): Skipped 58 frames! The application may be doing too much work on
its main thread.
E/WindowManager(1132): android.view.WindowLeaked: Activity
com.example.propertypanther.AddUserActivity has leaked window
com.android.internal.policy.impl.PhoneWindow$DecorView{b1e3d240 V.E..... R.....ID 0,0-
729,192} that was originally added here
E/WindowManager(1132): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:348)
E/WindowManager(1132): at
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
E/WindowManager(1132): at
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
E/WindowManager(1132): at android.app.Dialog.show(Dialog.java:286)
E/WindowManager(1132): at
com.example.propertypanther.AddUserActivity$CreateNewUser.onPreExecute
(AddUserActivity.java:97)
E/WindowManager(1132): at
android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587)
E/WindowManager(1132): at android.os.AsyncTask.execute(AsyncTask.java:535)
E/WindowManager(1132): at
com.example.propertypanther.AddUserActivity$2.run(AddUserActivity.java:78)
E/WindowManager(1132): at android.os.Handler.handleCallback(Handler.java:733)
E/WindowManager(1132): at android.os.Handler.dispatchMessage(Handler.java:95)
E/WindowManager(1132): at android.os.Looper.loop(Looper.java:136)
E/WindowManager(1132): at android.app.ActivityThread.main(ActivityThread.java:5017)
E/WindowManager(1132): at java.lang.reflect.Method.invokeNative(Native Method)
E/WindowManager(1132): at java.lang.reflect.Method.invoke(Method.java:515)
E/WindowManager(1132): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
E/WindowManager(1132): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
E/WindowManager(1132): at dalvik.system.NativeStart.main(Native Method)