How to return a value from thread in java?

android, java, multithreading

Solution

It you really want to use `Thread` only, try this

    public class Rate_fetch {
    String total = "";
    boolean b = true;

    public String rate(String dt) {
        StringBuilder sb = new StringBuilder();
        new Thread(new Runnable() {

            public void run() {

                try {

                    URL url = new URL(tally_ipaddr + "/prorate.jsp?plist="
                            + sss.toString().trim());

                    HttpURLConnection urlConnection = (HttpURLConnection) url
                            .openConnection();
                    InputStream in = new BufferedInputStream(urlConnection
                            .getInputStream());
                    BufferedReader r = new BufferedReader(
                            new InputStreamReader(in));
                    StringBuilder sb = new StringBuilder();
                    String s;
                    while (true) {
                        s = r.readLine();
                        if (s == null || s.length() == 0)
                            break;
                        sb.append(s);
                    }
                    b = true;
                } catch (Exception e) {
                    b = true;
                }
            }

        }).start();
        while (b) {

        }
        total = sb.toString();
        return sb.toString();

    }
}

Problem

In android i am creating thread for url connection.Inside the thread i store the response message in a string which is globally declared.When I access the method method it returns null. ``` public class Rate_fetch { String total=""; public String rate(String dt) { new Thread(new Runnable(){ public void run(){ try { URL url = new URL(tally_ipaddr+"/prorate.jsp?plist="+sss.toString().trim()); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStream in = new BufferedInputStream(urlConnection.getInputStream()); BufferedReader r = new BufferedReader(new InputStreamReader(in)); String x = ""; String total = ""; x = r.readLine(); int i=0; while(x.length()>1) { total=total+x.toString().trim(); i++; x = r.readLine(); } } catch(Exception e){ return e.toString(); } } }).start(); return total; } ``` When i call the method it returns null. ``` Rate_fetch rf=new Rate_fetch(); String amt= rf.rate(prodList); ```

Original source