当前位置: 首页 > 知识库问答 >
问题:

从AsyncTask更新视图

陶琦
2023-03-14

我想在android中从mysql数据库中检索数据,并在textview中显示

这是后台asynctask代码

public class BackgroundAsyncTask extends AsyncTask<String, Void, String> {
Context ctx;
TextView tv;

BackgroundAsyncTask(Context ctx) {
    this.ctx = ctx;
}
protected void onPreExecute() {
    super.onPreExecute();
}

@Override
protected String doInBackground(String... params) {
    String insert_url="http://192.168.10.3:81/android_exam_practice/insert.php";
    String select_url="http://192.168.10.3:81/android_exam_practice/select.php";
    String method=params[0];
    if(method.equals("insert"))
    {
        String name=params[1];
        String email=params[2];
        try {
            URL url=new URL(insert_url);
            HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoOutput(true);
            OutputStream outputStream=httpURLConnection.getOutputStream();
            BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
            String data= URLEncoder.encode("name","UTF-8")+"="+URLEncoder.encode(name,"UTF-8")+"&"+
                    URLEncoder.encode("email","UTF-8")+"="+URLEncoder.encode(email,"UTF-8");
            bufferedWriter.write(data);
            bufferedWriter.flush();
            outputStream.close();
            InputStream inputStream=httpURLConnection.getInputStream();
            inputStream.close();
            return "data inserted ";
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    else if(method.equals("select"))
    {
 //   String Name=params[1];
   // String Email=params[2];
        try {
            URL url=new URL(select_url);
            HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("post");
            httpURLConnection.setDoInput(true);
            httpURLConnection.setDoOutput(true);
            //OutputStream outputStream=httpURLConnection.getOutputStream();
            //BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
            //String data =URLEncoder.encode("");
            InputStream inputStream=httpURLConnection.getInputStream();
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
            String response ="";
            String line ="";
            while((line=bufferedReader.readLine())!=null)
            {
                response+=line;
            }
            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return null;
}

@Override
protected void onProgressUpdate(Void... values) {
    super.onProgressUpdate(values);
}

@Override
protected void onPostExecute(String aVoid) {
    super.onPostExecute(aVoid);
   // Toast.makeText(ctx, aVoid, Toast.LENGTH_SHORT).show();
    tv.setText(aVoid);
}

}

共有1个答案

翟默
2023-03-14

你的解决方案在这里。

OnPostExecute()方法中初始化TextView

@Override
protected void onPostExecute(String aVoid) {
    super.onPostExecute(aVoid);
   // Toast.makeText(ctx, aVoid, Toast.LENGTH_SHORT).show();
    tv = findViewById(R.id.textView); 
    tv.setText(aVoid);
}
 类似资料:
  • 我在通知CursorAdapter数据已更改时遇到问题。 SQLite数据库用AsyncTask更新(有公共接口,ListFragment用listener实现),我尝试用onPostExecute刷新ListAdapter,但我真的不知道如何刷新。

  • tl;dr:ngOnChanges显示在输入属性上检测到更改,但视图未更新 我正在开发一个Angular(2+)应用程序,试图为一个异步任务创建一个进度条,该任务由一个服务使用可观察的。Observable将数字作为数据推送,以指示任务已完成的百分比。涉及三个部分:服务、ResultsComponent和ProgressBarComponent(ResultsComponent的子级)。基本数据流

  • 我的想法是,我启动一个异步任务,从Tweeter获取状态...在这里之前一切正常...但是当我遇到一些特定的tweets时,我需要用服务器上的一些信息来修改它们,这里我将进行另一个网络操作,因为我需要等待,直到我从服务器上获取信息,我做: 这是从doInBackground()方法中的allready启动的AsyncTask启动的... 我知道我可以在AsyncTask中添加方法并在doInBac

  • 问题内容: 抱歉,这可能是一个简单的错误,对Android开发人员来说是新的,但是我一直在网上寻找答案,而这些解决方案似乎都不起作用。每当我尝试运行下面的代码时,都会提示为什么/如何修复它的任何想法。首先是java文件 一直工作到这里,然后在下一行崩溃 XML文件中的部分看起来像这样, 它在表格中的位置,呈线性布局。 Logcat错误: 问题答案: 在片段的内部更改如下: 您尝试不使用其容器视图来

  • 问题内容: 我目前正在使用基于Web的Twitter客户端,因此我使用了angular.js,node.js和socket.io。我通过socket.io将新的推文推到我的客户端,服务在其中等待新的推文。当一条新的推文到来时,该服务通过$ broadcast发送事件。 在我的控制器中是一个事件侦听器,其中传入的tweet在单独的函数中进行处理。此功能只是将新的推文推入我的推文范围。 现在,我的问题

  • 我有一个类SomeActivity扩展了BaseListActivity。BaseListActivity扩展了ListActivity和所有工作的功能。 但当列表必须更新时,我使用AsyncTask使用远程服务器调用,该调用声明如下: 在那里,有一行可以像这样更新列表: 但这条线似乎起不到什么作用。 有什么不同之处可以让它发挥作用吗? 但例外情况并不准确。我能解决主机问题。在我添加BaseLis