Используйте AsyncTask и метод POST для отправки переменной на сервер и получения объекта JSON - PullRequest
0 голосов
/ 26 апреля 2019

Я использую AsyncTask и метод GET для отправки переменной на сервер, получения объекта JSON и анализа объекта JSON, все работает!

Но теперь я хочу изменить свой метод, использующий метод POST для отправки переменной на сервер, возврата объекта JSON и анализа объекта JSON, а не использования метода GET.

Что я могуdo?

Вот мой код, который использует метод GET для отправки переменной на сервер, получения объекта JSON и анализа объекта JSON:

public class MainActivity extends AppCompatActivity {

    public static String TAG = "MainActivity";

    public static String deviceIMEI;
    public static String token;
    TelephonyManager telephonyManager;

    public static String memoryToken;
    public static SharedPreferences setting;

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

        memoryToken = null;

        deviceId();

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.
            return;
        }
        deviceIMEI = telephonyManager.getDeviceId();

        if(deviceIMEI != null){
            setting = getSharedPreferences("UserData", MODE_PRIVATE);
            memoryToken = setting.getString("Token", "");

            if(memoryToken != null && memoryToken != ""){

                Intent i = new Intent(MainActivity.this, CoverActivity.class);
                startActivity(i);
            }

            else if(memoryToken == ""){
                new JSONTask().execute("api1" + "?deviceId=" + deviceIMEI + "&os=0");

                Intent i = new Intent(MainActivity.this, CoverActivity.class);
                startActivity(i);
            }

            else{

            }
        }

        else{

        }
    }

    private void deviceId() {
        telephonyManager = (TelephonyManager) getSystemService(this.TELEPHONY_SERVICE);
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
            return;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
        switch (requestCode) {
            case 1:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, 1);
                        return;
                    }

                    String iemi = telephonyManager.getDeviceId();
                    deviceIMEI = iemi;

                    if(deviceIMEI != null){
                        new JSONTask().execute("api1" + "?deviceId=" + deviceIMEI + "&os=0");

                        Intent i = new Intent(MainActivity.this, CoverActivity.class);
                        startActivity(i);
                    }

                } else {

                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }


    public class JSONTask extends AsyncTask<String, String, String> {

        @Override
        protected String doInBackground(String... params) {
            HttpURLConnection connection = null;
            BufferedReader reader = null;

            try {
                URL url = new URL(params[0]);
                connection = (HttpURLConnection) url.openConnection();
                connection.connect();

                InputStream stream = connection.getInputStream();

                reader = new BufferedReader(new InputStreamReader(stream));

                StringBuffer buffer = new StringBuffer();

                String line = "";
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }

                String finalJson = buffer.toString();

                try{
                    JSONObject jsonObject = new JSONObject(finalJson);
                    String code = jsonObject.getString("code");
                    String desc = jsonObject.getString("desc");

                    if(Integer.valueOf(code) == 1){
                        JSONObject userInfo = jsonObject.getJSONObject("userInfo");
                        token = userInfo.getString("token");
                        Log.e(TAG, "token in JSONTask : " + token);

                        setting = getSharedPreferences("UserData", MODE_PRIVATE);
                        setting.edit().clear().commit();
                        setting.edit().putString("Token", token).commit();

                        memoryToken = setting.getString("Token", "");
                    }

                    else{

                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

                //return buffer.toString();

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
                try {
                    if (reader != null) {
                        reader.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
        }
    }

}

1 Ответ

1 голос
/ 26 апреля 2019

Если вы хотите отправить свои данные, используя post в HttpUrlConnection, вам нужно записать эти данные в ваше тело.

Я создал один класс и добавил оба метода для GET и POST в одном файле.Вам просто нужно вызвать этот метод с вашими URL и Parameters для Api Call.

Пожалуйста, проверьте этот файл: https://filebin.net/rwg3i8mdpt77rju4/ApiCall.java?t=68ibdati

, если вы видите вПрикрепленный файл ApiCall.java, есть два метода.ApiCall.getWebserviceCall() и ApiCall.postWebserviceCall() вернут вам ответ API в строковом формате.Затем вы можете выполнить свой код синтаксического анализа JSON.

Вы можете вызывать методы POST и GET, используя следующий способ.И согласно AsyncTask, вы можете использовать такие методы, как,

public class JSONTask extends AsyncTask<String, String, String> {

    private Context context;

    private String deviceIMEI;
    private String os;

    public JSONTask(Context context, String deviceIMEI, String os) {
        this.context = context;
        this.deviceIMEI = deviceIMEI;
        this.os = os;
    }

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

        try {

            String SERVER_WS_URL = params[0];

            LinkedHashMap<String, String> parameter = new LinkedHashMap<>();
            parameter.put("deviceId", deviceIMEI);
            parameter.put("os",  "0");

            return ApiCall.postWebserviceCall(SERVER_WS_URL, params);
            // return ApiCall.getWebserviceCall(SERVER_WS_URL, params); // If you want to call GET Api

        } catch (Exception e) {
            return null;
        }
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        try {

            if (result != null) {

                JSONObject jsonObject = new JSONObject(result.toString());

                String code = jsonObject.getString("code");
                String desc = jsonObject.getString("desc");

                if (Integer.valueOf(code) == 1) {

                    JSONObject userInfo = jsonObject.getJSONObject("userInfo");

                    token = userInfo.getString("token");
                    Log.e(TAG, "token in JSONTask : " + token);

                    setting = getSharedPreferences("UserData", MODE_PRIVATE);
                    setting.edit().clear().commit();
                    setting.edit().putString("Token", token).commit();

                    memoryToken = setting.getString("Token", "");

                } else {

                }
            } else {
                Toast.makeText(context, "Something went wrong", Toast.LENGTH_SHORT).show();
            }

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

Теперь вы можете вызвать этот AsyncTask, используя

new JSONTask(deviceIMEI, "0").execute("api1");
...