0

I created two activities one contains some text fields which accepts data. From other activity(Async Task) this data is sent to the server and gets the response from the server.

I am able to log the response but unable to store that response in variable and user in other activities. Is there any way to do that?

Here is one activity,

RegisterDevice.java

package sys.darpan.tracking;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class RegisterDevice extends Activity{

EditText regEmail, regPassword, regImei, regDeviceName, regVehicleNumber;
Button regButton;
AsyncRegisterDevice asd;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register_device);

    regEmail = (EditText)findViewById(R.id.regEmail);
    regPassword = (EditText)findViewById(R.id.regPassword);
    regVehicleNumber = (EditText)findViewById(R.id.regVehicleNum);
    regImei = (EditText)findViewById(R.id.regImei);
    regDeviceName = (EditText)findViewById(R.id.regDeviceName);
    regButton = (Button)findViewById(R.id.regButton);

    regImei.setText("165465416416416");
    regDeviceName.setText("GT-I9300");

    regButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            registerDevice();               
        }
    });
}

protected void registerDevice(){

    asd = new AsyncRegisterDevice();

    String email = regEmail.getText().toString();
    String password = regPassword.getText().toString();
    String imei = regImei.getText().toString();
    String deviceName = regDeviceName.getText().toString();
    String vehicleNo = regVehicleNumber.getText().toString();

    String aobj[] = new String[5];
    aobj[0] = email;
    aobj[1] = password;
    aobj[2] = vehicleNo;
    aobj[3] = imei;
    aobj[4] = deviceName;
    asd.execute(aobj);
}
}

Here is Async Task,

package sys.darpan.tracking;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.os.AsyncTask;
import android.util.Log;

public class AsyncRegisterDevice extends AsyncTask<String, String, String> {
String sb;
String finalResult;

@Override
protected String doInBackground(String... params) {

    String email = params[0];
    String password = params[1];
    String vnumber = params[2];
    String imei = params[3];
    String deviceName = params[4];

    DefaultHttpClient defaulthttpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://logicvibes.com/vts/register-device.php");

    ArrayList<BasicNameValuePair> arraylist = new ArrayList<BasicNameValuePair>(5);
    arraylist.add(new BasicNameValuePair("email", email));
    arraylist.add(new BasicNameValuePair("pass", password));
    arraylist.add(new BasicNameValuePair("vno", vnumber));
    arraylist.add(new BasicNameValuePair("imei", imei));
    arraylist.add(new BasicNameValuePair("dname", deviceName));
    try
    {
        httppost.setEntity(new UrlEncodedFormEntity(arraylist));
        httppost.getAllHeaders();
    }
    catch (UnsupportedEncodingException unsupportedencodingexception)
    {
        unsupportedencodingexception.printStackTrace();
    }
    try {
            // HttpResponse is an interface just like HttpPost.
            //Therefore we can't initialize them
            HttpResponse httpResponse = defaulthttpclient.execute(httppost);

            // According to the JAVA API, InputStream constructor do nothing. 
            //So we can't initialize InputStream although it is not an interface
            InputStream inputStream = httpResponse.getEntity().getContent();

            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);

            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            StringBuilder stringBuilder = new StringBuilder();

            String bufferedStrChunk = null;

            while((bufferedStrChunk = bufferedReader.readLine()) != null){
                stringBuilder.append(bufferedStrChunk);
            }
            sb = stringBuilder.toString();
            Log.d("Custom resp: ", sb);
        }
        catch(Exception e){
            e.printStackTrace();
        }
    return null;
}

@Override
 protected void onPostExecute(String sb) {
       Log.d("RESULT", "Result : " + sb);//this returns NULL
       finalResult = sb;

 }

public String getFinalResult() {
    return finalResult;
}
}

I searched a lot but no luck, please tell me the proper way to do this.

Darpan Kulkarni
  • 1,362
  • 1
  • 17
  • 36

1 Answers1

0

Solved it by using,

try {
        asd.execute(aobj).get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
}

The main thread waits until the async task finished processing. (good for short processes)

Darpan Kulkarni
  • 1,362
  • 1
  • 17
  • 36