Android 执行异步任务不起作用
当用户点击按钮时,我试图执行一个AsyncTask来更新活动中的textView。按钮操作为“openVotar”,要更新的textView为“textvaloracionempresa”。点击按钮时,不会显示异常,但会发生任何情况。显示的URL来自一个带有JSON编码函数的PHP文件,输出是来自此类型[“8”]的数组 当前代码:Android 执行异步任务不起作用,android,android-asynctask,Android,Android Asynctask,当用户点击按钮时,我试图执行一个AsyncTask来更新活动中的textView。按钮操作为“openVotar”,要更新的textView为“textvaloracionempresa”。点击按钮时,不会显示异常,但会发生任何情况。显示的URL来自一个带有JSON编码函数的PHP文件,输出是来自此类型[“8”]的数组 当前代码: public void openVotar(View view) { Log.i("Response", "Hemos entrado en openVota
public void openVotar(View view)
{
Log.i("Response", "Hemos entrado en openVotar: ");
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR1)
new MyAsyncTask().execute();
else
new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
private class MyAsyncTask extends AsyncTask<String, Integer, Double>{
@Override
protected Double doInBackground(String... params) {
// TODO Auto-generated method stub
Log.i("Response", "Hemos entrado en asynctask: ");
return null;
}
protected void onPostExecute(Double result){
}
protected void onProgressUpdate(Integer... progress){
pb.setProgress(progress[0]);
}
public void postData(String valueIWantToSend) {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://xxxx/cambiarvaloracionempresa.php?id="+idEmpresa
);
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("myHttpData", valueIWantToSend));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
TextView txtvaloracionempresa = (TextView) findViewById(R.id.valoracionEmpresa);
InputStream ips = response.getEntity().getContent();
BufferedReader buf = new BufferedReader(new InputStreamReader(ips, "UTF-8"));
StringBuilder sb = new StringBuilder();
String s;
while (true) {
s = buf.readLine();
if ((s == null) || (s.length() == 0))
break;
sb.append(s);
}
buf.close();
ips.close();
Log.i("Response", "My response is: " + sb.toString());
txtvaloracionempresa.setText(sb.toString());
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
public void openVotar(视图)
{
Log.i(“响应”,“开放式血液中的血液夹杂”);
如果(Build.VERSION.SDK_INT您已经向远程服务器发送了HTTPPOST
请求,但您没有处理它返回的内容。响应实际上不是它返回的文本,而是HttpResponse
您需要添加如下内容:
InputStream ips = response.getEntity().getContent();
BufferedReader buf = new BufferedReader(new InputStreamReader(ips, "UTF-8"));
StringBuilder sb = new StringBuilder();
String s;
while (true) {
s = buf.readLine();
if ((s == null) || (s.length() == 0))
break;
sb.append(s);
}
buf.close();
ips.close();
Log.i("Response", "My response is: " + sb.toString());
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR1)
new MyAsyncTask().execute();
else
new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
----编辑---
将AsyncTask
execute语句更改如下:
InputStream ips = response.getEntity().getContent();
BufferedReader buf = new BufferedReader(new InputStreamReader(ips, "UTF-8"));
StringBuilder sb = new StringBuilder();
String s;
while (true) {
s = buf.readLine();
if ((s == null) || (s.length() == 0))
break;
sb.append(s);
}
buf.close();
ips.close();
Log.i("Response", "My response is: " + sb.toString());
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB_MR1)
new MyAsyncTask().execute();
else
new MyAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
if(Build.VERSION.SDK_INT)是否显示您的toast消息?@hmartinezd,否,也不显示。由于getApplicationContext()
。除非您完全确定自己知道自己在做什么,否则使用应用程序上下文是个坏主意。Empresas\u SingleItemView.java
文件的第151行是什么?@nKn,它是line:postData(参数[0]);我猜openVotar中对MyAsyncTask的调用不起作用,调用该方法有什么帮助吗?您是否在应用程序中一次运行多个AsyncTask
?在doInBackground()中添加Log.d(“你好”,“我在这里!”)
行
并检查它是否在您的日志中显示任何内容。解决了,我只需要将min SDK设置为11,它是8,至少现在它激发:-)它可能是由所有getApplicationContext()引起的
正如我在评论中指出的,您使用的语句是错误的,您应该使用执行异步任务的活动的上下文。