从线程Android Java返回字符串 [英] Return a String from a Thread Android Java

查看:112
本文介绍了从线程Android Java返回字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用一个线程来执行HttpURLConnection并从数据库中获取数据.下面的代码表示我想要完成的工作,但是在行上却出现错误

I am using a Thread to perform an HttpURLConnection and get data from my database. The code below represents what I would like to accomplish but I get an error on the line

str_Data =约翰·多伊";

错误:从内部类内部访问变量'str_Data'

public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.MainActivity);

    String str_Name = "";

    str_Name = setDataToText(str_Url);

}

 private String setDataToText(String urlStr) {
    final String url = urlStr;
    String str_Data = "";

    new Thread() {
        public void run() {
            //A code to retrieve data is executed
            //Data is Converted and added to the string str_Data;
            str_Data = "John Doe";
        }
    }
    return str_Data;
}

我想将新Thread()上run()操作内的str_Data值设置为从数据库中恢复的数据.

I would like to set the value of str_Data inside the run() operation on my new Thread() to the data that was recovered from my Database.

这是我如何解决的问题,请让我知道使用此方法时不是很好的做法,谢谢您的帮助:

THIS IS HOW I SOLVED THE PROBLEM, Let me know if it is not good practice when using this method, thanks for the help:

String str_Data = "";

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.MainActivity);

setDataToText(str_Url);
txtName.setText(str_Data);
}

private void setDataToText(String urlStr) {
    new Thread(new Runnable() {
    @Override
        public void run() {
        // TODO Auto-generated method stub
        //A code to retrieve data is executed
        //Data is Converted and added to the string str_Data;
        str_Data = "John Doe";
        }
    }).start();
}

推荐答案

使用界面使其正常工作.

Use interface to make it work properly.

private interface DataListener{
        void onDataReady(String data);
    }

    private String str_Name = "";

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.MainActivity);

        setDataToText(str_Url, new DataListener() {
            @Override
            public void onDataReady(String data) {
                str_Name = data;
                System.out.println(str_Name);
            }
        });

    }


    private void setDataToText(final String urlStr,final DataListener dataListener) {


        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                //A code to retrieve data is executed
                //Data is Converted and added to the string str_Data;
                String str_Data = "John Doe";
                dataListener.onDataReady(str_Data);
            }
        }).start();


    }

这篇关于从线程Android Java返回字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆