Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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
Javascript 如何在recyclerView Android中管理显示数据_Javascript_Android_Android Recyclerview - Fatal编程技术网

Javascript 如何在recyclerView Android中管理显示数据

Javascript 如何在recyclerView Android中管理显示数据,javascript,android,android-recyclerview,Javascript,Android,Android Recyclerview,我有一个webView,其中有三个组件来自html文件。我希望应用程序在单击按钮后发送短信,并在recyclerView中显示消息日志 因此,sms将正确发送,但在recyclerView中没有显示任何内容 资产中的message.html <!DOCTYPE html> <html lang="en"> <head> <script type="text/javascript"> funct

我有一个
webView
,其中有三个组件来自
html
文件。我希望应用程序在单击按钮后发送短信,并在
recyclerView
中显示消息日志

因此,sms将正确发送,但在
recyclerView
中没有显示任何内容

资产中的message.html

    <!DOCTYPE html>
<html lang="en">
    <head>
        <script type="text/javascript">
            function sendAndroidMessage() {

                phoneNumber = document.getElementById('phoneNumber').value;
                messageText = document.getElementById('messageText').value;

                Android.sendMessage(phoneNumber, messageText);
            }
            </script>
    </head>
    <body>
        <input id="phoneNumber" type="tel" placeholder="Enter the Phone Number"/>
        <br/>
        <br/>
        <input id="messageText" type="text" placeholder="Enter Message Content" >
        <br/>
        <br/>
        <input id="sendBtn" type="button" value="Send" onclick="sendAndroidMessage()" >
    </body>
</html>
sendSMS():

最后是MainActivity.java:

messageInfo = (WebView)findViewById(R.id.message);
    messageInfo.loadUrl("file:///android_asset/message.html");
    messageInfo.getSettings().setJavaScriptEnabled(true);
    message = new Message();

    recyclerView = (RecyclerView)findViewById(R.id.show_message);
    messageAdapter = new MessageAdapter(this, messageList);

    messageInfo.addJavascriptInterface(new SendMessageInterface(MainActivity.this), "Android");

    setMessageAdapter();
setMassageAdapter():


我很困惑,不知道如何修复它,也不知道如何搜索什么,我找到了答案!我把它放在这里,希望对其他人有用。 无需
asyncTask
类或任何东西,只需在发送短信时调用
setMessageAdapter
。现在,
main活动
是这样的:

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

    checkPermission();


    messageInfo = (WebView)findViewById(R.id.message);
    messageInfo.loadUrl("file:///android_asset/message.html");
    messageInfo.getSettings().setJavaScriptEnabled(true);
    message = new Message();

    recyclerView = (RecyclerView)findViewById(R.id.show_message);
    messageAdapter = new MessageAdapter(this, messageList);

    messageInfo.addJavascriptInterface(new SendMessageInterface(), "Android");

}

public void checkPermission(){
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {

        if (checkSelfPermission(Manifest.permission.SEND_SMS)
                == PackageManager.PERMISSION_DENIED) {

            Log.d("permission", "permission denied to SEND_SMS - requesting it");
            String[] permissions = {Manifest.permission.SEND_SMS};

            requestPermissions(permissions, PERMISSION_REQUEST_CODE);

        }
    }
}

public class SendMessageInterface {

    public SendMessageInterface() {}
    @JavascriptInterface
    public void sendMessage(String phoneNumber, String messageText) {

        message = new Message();
        message.setMessageText(messageText);
        message.setPhoneNumber(phoneNumber);

        sendSMS();
    }
}

public void sendSMS(){

    String smsBody      = message.getMessageText();
    String phoneNumber  = message.getPhoneNumber();

    String SENT = "SMS_SENT";

    PendingIntent sentPI = PendingIntent.getBroadcast(MainActivity.this, 0,
            new Intent(SENT), 0);

    //---when the SMS has been sent---
    registerReceiver (new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode())
            {
                case Activity.RESULT_OK:

                    message.setMessageSent(true);
                    Log.e("is sent?1", ": " + message.isMessageSent());
                    setMessageAdapter();
                default:
                    message.setMessageSent(false);
                    setMessageAdapter();
            }
        }
    }, new IntentFilter(SENT));

    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNumber, null, smsBody, sentPI, null);

        dataBase = new DataBase(MainActivity.this);
        dataBase.insertSms(phoneNumber, smsBody, message.isMessageSent());


    }catch (Exception ex) {
        Toast.makeText(MainActivity.this,ex.getMessage().toString(),
                Toast.LENGTH_LONG).show();
        ex.printStackTrace();
    }

}

public void setMessageAdapter(){

    messageList.add(message);

    recyclerView.setHasFixedSize(false);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());

    recyclerView.setAdapter(messageAdapter);
    messageAdapter.notifyDataSetChanged();

}
messageInfo = (WebView)findViewById(R.id.message);
    messageInfo.loadUrl("file:///android_asset/message.html");
    messageInfo.getSettings().setJavaScriptEnabled(true);
    message = new Message();

    recyclerView = (RecyclerView)findViewById(R.id.show_message);
    messageAdapter = new MessageAdapter(this, messageList);

    messageInfo.addJavascriptInterface(new SendMessageInterface(MainActivity.this), "Android");

    setMessageAdapter();
messageList.add(message);

    recyclerView.setHasFixedSize(false);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());

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

    checkPermission();


    messageInfo = (WebView)findViewById(R.id.message);
    messageInfo.loadUrl("file:///android_asset/message.html");
    messageInfo.getSettings().setJavaScriptEnabled(true);
    message = new Message();

    recyclerView = (RecyclerView)findViewById(R.id.show_message);
    messageAdapter = new MessageAdapter(this, messageList);

    messageInfo.addJavascriptInterface(new SendMessageInterface(), "Android");

}

public void checkPermission(){
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {

        if (checkSelfPermission(Manifest.permission.SEND_SMS)
                == PackageManager.PERMISSION_DENIED) {

            Log.d("permission", "permission denied to SEND_SMS - requesting it");
            String[] permissions = {Manifest.permission.SEND_SMS};

            requestPermissions(permissions, PERMISSION_REQUEST_CODE);

        }
    }
}

public class SendMessageInterface {

    public SendMessageInterface() {}
    @JavascriptInterface
    public void sendMessage(String phoneNumber, String messageText) {

        message = new Message();
        message.setMessageText(messageText);
        message.setPhoneNumber(phoneNumber);

        sendSMS();
    }
}

public void sendSMS(){

    String smsBody      = message.getMessageText();
    String phoneNumber  = message.getPhoneNumber();

    String SENT = "SMS_SENT";

    PendingIntent sentPI = PendingIntent.getBroadcast(MainActivity.this, 0,
            new Intent(SENT), 0);

    //---when the SMS has been sent---
    registerReceiver (new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode())
            {
                case Activity.RESULT_OK:

                    message.setMessageSent(true);
                    Log.e("is sent?1", ": " + message.isMessageSent());
                    setMessageAdapter();
                default:
                    message.setMessageSent(false);
                    setMessageAdapter();
            }
        }
    }, new IntentFilter(SENT));

    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNumber, null, smsBody, sentPI, null);

        dataBase = new DataBase(MainActivity.this);
        dataBase.insertSms(phoneNumber, smsBody, message.isMessageSent());


    }catch (Exception ex) {
        Toast.makeText(MainActivity.this,ex.getMessage().toString(),
                Toast.LENGTH_LONG).show();
        ex.printStackTrace();
    }

}

public void setMessageAdapter(){

    messageList.add(message);

    recyclerView.setHasFixedSize(false);
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(MainActivity.this);
    recyclerView.setLayoutManager(mLayoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());

    recyclerView.setAdapter(messageAdapter);
    messageAdapter.notifyDataSetChanged();

}