我正在尝试读取一个返回0或-1的uri。异步任务是从Fragment内部调用的。基本上,当用户点击一个按钮时,它就是一个登录,在远程服务器上检查输入。
在调试器中,任务显示为RUNNING,但从未完成,也没有调用任何重写的成员,这可能解释了它为什么什么都不做
登录代码为:
// Validate the user.
String uri = HLConsts.SERV_URI + "ValidateLoginUser?uname=" + szUserName + "&password=" + szPassword + "&android=1";
ReadUri rd = new ReadUri(uri);
int cnt =0;
rd.execute();
while ( rd.getSzReturn() == null || cnt > 5) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
cnt++;
}
if(cnt > 5) {
errors++;
}
String szValid = rd.getSzReturn();
Snackbar.make(root, "Name = " + szUserName + " Pass = " + szPassword , Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
============================异步任务是:
public class ReadUri extends AsyncTask< Void , Void, String> {
// private Context mContext;
private String mUrl;
private String szReturn = null;
public String getSzReturn() {
return szReturn;
}
public ReadUri( String url) {
// mContext = context;
mUrl = url;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// dynamictext = (TextView) myView.findViewById(R.id.textview_first);
}
@Override
protected String doInBackground(Void... params) {
String resultString = null;
resultString = getString(mUrl);
return resultString;
}
@Override
protected void onPostExecute(String strings) {
super.onPostExecute(strings);
szReturn =strings;
}
//======================================================================================
private String getString(String InUrl) {
String ret = "Nothing";
URL url = null;
try {
url = new URL(InUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection httpURLConnection = null;
try {
httpURLConnection = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
// The line below is where the exception is called
int response = 0;
try {
response = httpURLConnection.getResponseCode();
} catch (IOException e) {
e.printStackTrace();
}
Log.i("Response", String.valueOf(response));
if (response == HttpURLConnection.HTTP_OK) {
// Response successful
InputStream inputStream = null;
try {
inputStream = httpURLConnection.getInputStream();
} catch (IOException ex) {
ex.printStackTrace();
}
// Parse it line by line
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(inputStream));
String line;
StringBuffer sb = new StringBuffer();
while (true) {
try {
// if (!((temp = bufferedReader.readLine()) != null)) {
while((line=bufferedReader.readLine())!=null)
{
// sb.append(line); //appends line to string buffer
// sb.append("n"); //line feed
ret += line;
Log.w("MyApp",line);
}
} catch (IOException ex) {
ex.printStackTrace();
}
// Parsing of data here
}
} else {
Log.e("SAMES", "INCORRECT RETURN CODE: " + response);
}
httpURLConnection.disconnect();
// urlConnection.disconnect();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return ret;
}
}
请你帮忙。我设置了断点,但它们都没有被触发,doInBackground也从未被调用。
谢谢杰夫。
这是通过不使用外部类来运行异步任务来修复的。
示例如下:AsyncTask Android示例