首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Android Studio Emulator不能运行POST请求的一部分(Java)

为什么Android Studio Emulator不能运行POST请求的一部分(Java)
EN

Stack Overflow用户
提问于 2018-09-30 02:13:56
回答 1查看 200关注 0票数 -1

stackoverflow用户好,

我正在尝试编写一个post请求(发送SMS),该请求在单击按钮时被调用。post请求具有:

一个URL参数: api_key

一个标题:"Content-Type“= "application/x-www-form-urlencoded”

三对JSON:("from","insert#here"),("to","insert#here"),("body","Hello,World")

通过将POST请求发送到REST API端点URL,我希望在用户单击按钮时发送SMS。这就是我所拥有的:

代码语言:javascript
复制
public class PostSMS extends AsyncTask<Void, String, String>
{
@Override
protected String doInBackground(Void... params) {
    try {
        MainActivity.text.setText("enteredTry");


        URL url = new URL("https://api.apidaze.io/apikey/sms/send?api_secret=apisecret");
        HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();

        MainActivity.text.setText("connectionBuilt");


        urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

        urlConnection.setRequestMethod("POST");
        MainActivity.text.setText("connectionEstablished1");
        urlConnection.connect();

        MainActivity.text.setText("connectionEstablished23");

        // Create JSONObject Request
        JSONObject jsonRequest = new JSONObject();
        jsonRequest.put("from", "1111111111");
        jsonRequest.put("to", "1111111112");
        jsonRequest.put("body", "Hello, World");

        MainActivity.text.setText("jsonArrayConstructed");

        // Write Request to output stream to server
        OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream());
        out.write(jsonRequest.toString());
        out.close();

        MainActivity.text.setText("OutputStream written");

        int statusCode = urlConnection.getResponseCode();
        String statusMsg = urlConnection.getResponseMessage();

        // Connection success. Proceed to fetch the response.
        if (statusCode == 200)
        {
            InputStream it = new BufferedInputStream(urlConnection.getInputStream());
            InputStreamReader read = new InputStreamReader(it);
            BufferedReader buff = new BufferedReader(read);
            StringBuilder dta = new StringBuilder();
            String chunks;
            while ((chunks = buff.readLine()) != null)
            {
                dta.append(chunks);
            }
            String returndata = dta.toString();
            return returndata;
        }
    catch (ProtocolException e)
    {
        e.printStackTrace();
    } catch (MalformedURLException e)
    {
        e.printStackTrace();
    } catch (IOException e)
    {
        e.printStackTrace();
    } catch (Exception e)
    {
        e.printStackTrace();
    }

    return null;
}

}

在OnClickListener中运行这段代码时,我的TextView对象(代码中的文本)在模拟器中只显示"connectionEstablished1“,因此它不会运行程序的其余部分。

之后

代码语言:javascript
复制
urlConnection.setRequestMethod("POST");
MainActivity.text.setText("connectionEstablished1");

正在运行,

程序不再运行。没有编译时错误。

我有

代码语言:javascript
复制
<uses-permission android:name="android.permission.INTERNET" />

权限也是如此。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-30 03:24:07

我检查了你的代码,如果你移除MainActivity.text.setText(),它就可以工作了。

正如Mike M.指出的,您不应该使用MainActivity.text.setText()来跟踪进度,您应该使用Logging来跟踪进度。如果您想向用户显示进度,您应该使用onProgressUpdate(String...值)和可以在AsyncTask中覆盖的onPostExecute(字符串)。

此外,一旦你更熟悉Android studio界面,你也可以尝试debug your app,这比从catch块检查日志和StackTraces要容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52571199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档