我有一个通过android的服务器请求的代码。这是我try块的片段:我在try块内的代码没有在android中执行。没有其他线程似乎解释这
try{
post.setEntity(new UrlEncodedFormEntity(dataToSend));
HttpResponse httpResponse = client.execute(post);
HttpEntity entity = httpResponse.getEntity();
String result = EntityUtils.toString(entity);
JSONObject jsonObject = new JSONObject(result);
Toast.makeText(context,jsonObject.length()+"i ran",Toast.LENGTH_SHORT).show();
if(jsonObject.length() != 0){
Log.v("happened", "2");
String dbname = jsonObject.getString("dbname");
String userloggedin = jsonObject.getString("userloggedin");
String username = jsonObject.getString("username");String password = jsonObject.getString("password");
String email = jsonObject.getString("email");String name = jsonObject.getString("name");
String dob = jsonObject.getString("dob"); String mobile = jsonObject.getString("mobile");
String imagelink = jsonObject.getString("imagelink");String country = jsonObject.getString("country");
String currency = jsonObject.getString("currency");String recentcount = jsonObject.getString("recentcount");
String lowoncashlevel = jsonObject.getString("lowoncashlevel");
returnedUser = new User(dbname,Boolean.getBoolean(userloggedin),username,password,name,dob,mobile,email,imagelink,country,currency,Integer.getInteger(recentcount),Integer.getInteger(lowoncashlevel));
}
}catch (Exception e){
e.printStackTrace();
}
我知道,因为有在后台运行过一个进度对话框中的面包会导致错误,但它没有,这就是我发现,try块是问题出在哪里。
这是有这个方法的类:
public class FetchUserDataAsyncTask extends AsyncTask<Void,Void,User> {
User user;
GetUserCallBack userCallBack;
public FetchUserDataAsyncTask(User user, GetUserCallBack userCallBack){
this.user=user;
this.userCallBack=userCallBack;
}
@Override
protected User doInBackground(Void... params) {
ArrayList<NameValuePair> dataToSend = new ArrayList<>();
dataToSend.add(new BasicNameValuePair("username",user.username));
dataToSend.add(new BasicNameValuePair("password",user.password));
HttpParams httpRequestParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT);
HttpClient client = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost(SERVER_ADDRESS + "FetchUserData2.php");
User returnedUser = null;
try{
post.setEntity(new UrlEncodedFormEntity(dataToSend));
HttpResponse httpResponse = client.execute(post);
HttpEntity entity = httpResponse.getEntity();
String result = EntityUtils.toString(entity);
JSONObject jsonObject = new JSONObject(result);
Toast.makeText(context,jsonObject.length()+"i ran",Toast.LENGTH_SHORT).show();
if(jsonObject.length() != 0){
Log.v("happened", "2");
String dbname = jsonObject.getString("dbname");
String userloggedin = jsonObject.getString("userloggedin");
String username = jsonObject.getString("username");String password = jsonObject.getString("password");
String email = jsonObject.getString("email");String name = jsonObject.getString("name");
String dob = jsonObject.getString("dob"); String mobile = jsonObject.getString("mobile");
String imagelink = jsonObject.getString("imagelink");String country = jsonObject.getString("country");
String currency = jsonObject.getString("currency");String recentcount = jsonObject.getString("recentcount");
String lowoncashlevel = jsonObject.getString("lowoncashlevel");
returnedUser = new User(dbname,Boolean.getBoolean(userloggedin),username,password,name,dob,mobile,email,imagelink,country,currency,Integer.getInteger(recentcount),Integer.getInteger(lowoncashlevel));
// returnedUser = new User(jsonObject.getString("dbname"),Boolean.getBoolean(jsonObject.getString("userloggedin")),
// jsonObject.getString("username"),jsonObject.getString("password"),jsonObject.getString("name"),
// jsonObject.getString("dob"),jsonObject.getString("mobile"),jsonObject.getString("email"),
// jsonObject.getString("imagelink"),jsonObject.getString("country"),jsonObject.getString("currency"),
// Integer.getInteger(jsonObject.getString("recentcount")),Integer.getInteger(jsonObject.getString("lowoncashlevel")));
}
}catch (Exception e){
e.printStackTrace();
}
return returnedUser;
}
@Override
protected void onPostExecute(User returnedUser) {
progressDialog.dismiss();
userCallBack.done(returnedUser);
super.onPostExecute(returnedUser);
}
}
执行方法是从这个公共方法叫:
public void fetchUserDataInBackground(User user,GetUserCallBack userCallBack){
progressDialog.show();
new FetchUserDataAsyncTask(user,userCallBack).execute();
}
敬酒不从后台线程运行,并会抛出异常。但是由于您没有到达那里,因此您调用FetchUserDataAsyncTask类的方式看起来有错误。你能显示你实际调用它的那一行代码吗?我的猜测是,当你打算开始这个类时,你错过了execute()方法 – ucsunil
@Gogeta是的,我知道吐司会抛出一个异常。我在try块之前放了一个toast,它引发了一个错误,所以我推断try块上面的代码已经到达,但try块仍然没有被触及。 我添加的方法调用质疑 –
您可以将上线新FetchUserDataAsyncTask(.....)断点,看看是否正在达到该行代码?乍一看你的try/catch语句似乎很好。所以它必须是调用来启动没有运行的AsyncTask。 – ucsunil