Исключение FileIO при отправке sms-сообщения

#android #sms-gateway

#Android #sms-шлюз

Вопрос:

Моей подруге нужна помощь с ее диссертацией. Она создает приложение для Android, которое использует шлюз sms (для этого она использует шлюз sms от wavecell). Но когда она отправляет текстовое сообщение, оно выдает ошибку об исключении FileIO. Я уже пытался проверить и дать ей предложения, но у меня нет большого опыта использования шлюза sms, поэтому я не уверен, что я что-то пропустил.

Она говорит, что ее баланса за услугу все еще достаточно и срок его действия еще не истек. Она также пыталась сгенерировать новый токен доступа и изменить требуемые входные данные на жестко заданные значения, но это все еще не работает.

Вот код:

 package com.example.johnica.mysmsgateway;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.StrictMode;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.common.api.Api;
import com.google.android.gms.common.api.Response;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    Button send;
    EditText number, message1;

    final int SEND_SMS_PERMISSION_REQUEST_CODE = 1;

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

        send=findViewById(R.id.buttonSend);
        message1=findViewById(R.id.inputMessage);
        number=findViewById(R.id.inputNumber);

        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    // Construct data

                    String text = "amp;text="   message1.getText().toString();
                    String source = "amp;source="   "Take Care";
                    String destination = "amp;destination="   number.getText().toString();

                    HttpURLConnection conn = (HttpURLConnection) new URL("https://api.wavecell.com/sms/v1/{sub account id here}/single").openConnection();

                    String data = destination   text   source;

                    conn.setDoOutput(true);
                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("Authorization", "Bearer {used a token here}");
                    conn.setRequestProperty("Content-Type", "application/json");
                    conn.setRequestProperty("Content-Length", Integer.toString(data.length()));
                    conn.getOutputStream().write(data.getBytes("UTF-8"));
                    final BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                    final StringBuffer stringBuffer = new StringBuffer();
                    String line;
                    while ((line = rd.readLine()) != null) {
                        Toast.makeText(MainActivity.this,line.toString(), Toast.LENGTH_SHORT).show();
                    }
                    rd.close();

                } catch (Exception e) {
                    Toast.makeText(MainActivity.this,e.toString(), Toast.LENGTH_SHORT).show();
                }
            }
        });
        StrictMode.ThreadPolicy st= new StrictMode.ThreadPolicy.Builder().build();
        StrictMode.setThreadPolicy(st);

    }
}
  

При нажатии кнопки отправки stacktrace выдает JAVA IO file not found exception url https://developer.wavecell.com/v1/sms-api

Комментарии:

1. «выдает ошибку об исключении FileIO» — если можете, получите трассировку стека, связанную с этим исключением, и добавьте ее в вопрос.

2. @CommonsWare я только что добавил вывод stacktrace

3. Похоже, приложение не может связаться с этим сервером, возможно, из-за брандмауэра или подобной проблемы. Вы также могли бы рассмотреть возможность использования более современного HTTP-клиентского API, такого как OkHttp.

4. о, я понимаю. я попрошу ее обновить метод запроса post и проверить ее брандмауэр. Спасибо!

Ответ №1:

Как и предполагал @CommonsWare, сработала работа с более современным HTTP client API (в данном случае использовался OkHttp).