Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法将消息发送到行通知(使用HttpsURLConnection POST)_Java_Android_Http Post_Httpurlconnection_Httpsurlconnection - Fatal编程技术网

Java 无法将消息发送到行通知(使用HttpsURLConnection POST)

Java 无法将消息发送到行通知(使用HttpsURLConnection POST),java,android,http-post,httpurlconnection,httpsurlconnection,Java,Android,Http Post,Httpurlconnection,Httpsurlconnection,我是Android开发的新手,我正在尝试使用“身份验证方法->发布”()向在线通知服务发送消息 这是我的密码,我总是 退货状态代码:-1 。请帮我找出问题出在哪里 LINENotify.java 活动\u main.xml 我知道答案了!!感谢谷歌和发布他们的经验和笔记的人 我的失败是 为了避免创建无响应的UI,请不要在UI线程上执行网络操作。默认情况下,Android 3.0(API级别11)及更高版本要求您在主UI线程以外的线程上执行网络操作 因此,我尝试使用AsyncTask来解决这个问

我是Android开发的新手,我正在尝试使用“身份验证方法->发布”()向在线通知服务发送消息

这是我的密码,我总是

退货状态代码:-1

。请帮我找出问题出在哪里

LINENotify.java

活动\u main.xml


我知道答案了!!感谢谷歌和发布他们的经验和笔记的人

我的失败是


为了避免创建无响应的UI,请不要在UI线程上执行网络操作。默认情况下,Android 3.0(API级别11)及更高版本要求您在主UI线程以外的线程上执行网络操作


因此,我尝试使用AsyncTask来解决这个问题。

MainActivity.java

package com.example.test3;
导入androidx.appcompat.app.appcompat活动;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入java.io.IOException;
导入java.io.OutputStream;
导入java.io.OutputStreamWriter;
导入java.net.HttpURLConnection;
导入java.net.URL;
公共类MainActivity扩展AppCompatActivity实现View.OnClickListener{
编辑文本消息;
按钮发送;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
msg=(EditText)findViewById(R.id.EditText);
send=(按钮)findviewbyd(R.id.Button);
send.setOnClickListener(this);
}//一次创建
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id按钮:{
newlinenotify().execute(msg.getText().toString());
打破
}
}
}
公共类LINENotify扩展异步任务{
私有静态最终字符串强度点=”https://notify-api.line.me/api/notify";
私有静态最终字符串tokenKEY=“ldo3dtiajt5opjwbezaqtnxhq23pocxceavkotwjhn”;
字符串结果=”;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串背景(字符串…字符串){
字符串消息=字符串[0];
试一试{
URL=新URL(增强点);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“POST”);
connection.addRequestProperty(“授权”、“承载人”+令牌密钥);
connection.addRequestProperty(“内容类型”、“应用程序/x-www-form-urlencoded”);
连接。设置连接超时(15*1000);
connection.setDoOutput(真);
connection.setUseCaches(false);
connection.setReadTimeout(15*1000);
connection.setDoInput(true);
OutputStream os=connection.getOutputStream();
OutputStreamWriter writer=新的OutputStreamWriter(操作系统,“UTF-8”);
writer.write(“message=”+message);
writer.flush();
writer.close();
os.close();
connection.connect();
结果=connection.getResponseMessage();
连接断开();
}捕获(IOException错误){
//处理输入和输出错误
}
返回结果;
}
@凌驾
受保护的void onProgressUpdate(整型…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
}
}
}

一些参考链接:



package com.example.test3;

import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

public class LINENotify {

    private static final String strEndpoint = "https://notify-api.line.me/api/notify";
    private static final String tokenKEY = "ldO3dTIAjT5OpjWbeZAQtnXhq23poCXcEAvKoTwJHhn";

    public int sendMSG( String message ) {

        int statusCode;
        statusCode = -1;

        try {
            URL url = new URL( strEndpoint );
            HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();

            connection.setRequestMethod( "POST" );
            connection.addRequestProperty("Authorization",  "Bearer " + tokenKEY);
            connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            connection.setConnectTimeout(15*1000);
            connection.setDoOutput( true );
            connection.setUseCaches( false );
            connection.connect();

            connection.setReadTimeout(15*1000);
            connection.setDoInput( true );

            OutputStream os = connection.getOutputStream();
            BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( os, "UTF-8") );

            writer.write( "message=" + message );
            writer.flush();
            writer.close();

            os.close();

            statusCode = connection.getResponseCode();

            if ( statusCode == 200 ) {
                //
            } else {
                throw new Exception( "Error:(StatusCode)" + statusCode + ", " + connection.getResponseMessage() );
            }
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return statusCode;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test3">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>

</manifest>
package com.example.test3;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    EditText msg;
    Button send;

    LINENotify lineNotify;

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

        msg = (EditText) findViewById(R.id.editText);
        send = (Button) findViewById(R.id.button);

        lineNotify = new LINENotify();

        send.setOnClickListener(this);
    }// onCreate

    @Override
    public void onClick(View v) {
        switch( v.getId() ) {
            case R.id.button: {
                int statusCode = lineNotify.sendMSG( msg.getText().toString() );
                Toast.makeText(this, "Return status code: " + statusCode, Toast.LENGTH_LONG).show();
                break;
            }
        }
    }
}
package com.example.test3;

import androidx.appcompat.app.AppCompatActivity;

import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    EditText msg;
    Button send;

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

        msg = (EditText) findViewById(R.id.editText);
        send = (Button) findViewById(R.id.button);

        send.setOnClickListener(this);
    }// onCreate

    @Override
    public void onClick(View v) {
        switch( v.getId() ) {
            case R.id.button: {
                new LINENotify().execute(msg.getText().toString());
                break;
            }
        }
    }

    public class LINENotify extends AsyncTask<String, Integer, String> {

        private static final String strEndpoint = "https://notify-api.line.me/api/notify";
        private static final String tokenKEY = "ldO3dTIAjT5OpjWbeZAQtnXhq23poCXcEAvKoTwJHhn";
        String result = "";

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected String doInBackground(String... strings) {
            String message = strings[0];

            try {
                URL url = new URL( strEndpoint );
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                connection.setRequestMethod( "POST" );
                connection.addRequestProperty("Authorization",  "Bearer " + tokenKEY);
                connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");

                connection.setConnectTimeout(15*1000);
                connection.setDoOutput( true );
                connection.setUseCaches( false );

                connection.setReadTimeout(15*1000);
                connection.setDoInput( true );

                OutputStream os = connection.getOutputStream();
                OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8");

                writer.write( "message=" + message );
                writer.flush();
                writer.close();
                os.close();

                connection.connect();

                result = connection.getResponseMessage();

                connection.disconnect();
            } catch (IOException error) {
                // Handles input and output errors
            }
            return result;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
        }

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