在Java错误中使用或覆盖不推荐使用的API

时间:2019-07-08 18:33:42

标签: java android

我的代码在这里::

package maa.tic_tac_to;

import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MySMSReceiver extends BroadcastReceiver {

    private static final String TAG ="";
            //MySmsReceiver.class.getSimpleName();
    public static final String pdu_type = "pdus";

    @TargetApi(Build.VERSION_CODES.M)
    @Override
    public void onReceive(Context context, Intent intent) {
        // Get the SMS message.
        Bundle bundle = intent.getExtras();
        android.telephony.SmsMessage[] msgs;
        String strMessage = "";
        String strMsgBody = "";
        String format = bundle.getString("format");
        // Retrieve the SMS message received.
        Object[] pdus = (Object[]) bundle.get(pdu_type);
        if (pdus != null) {
            // Check the Android version.
            boolean isVersionM =
                    (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M);
            // Fill the msgs array.
            msgs = new android.telephony.SmsMessage[pdus.length];
            for (int i = 0; i < msgs.length; i++) {
                // Check Android version and use appropriate createFromPdu.
                if (isVersionM) {
                    // If Android version M or newer:
                    msgs[i] = android.telephony.SmsMessage.createFromPdu((byte[]) pdus[i], format);
                } else {
                    // If Android version L or older:
                    msgs[i] = android.telephony.SmsMessage.createFromPdu((byte[]) pdus[i]);
                }
                // Build the message to show.
//                strMessage += "SMS from " + msgs[i].getOriginatingAddress();
//                strMessage += " :" + msgs[i].getMessageBody() + "\n";
                strMsgBody += msgs[i].getMessageBody();
                // Log and display the SMS message.
//                Log.d(TAG, "onReceive: " + strMessage);
//                Toast.makeText(context, strMessage, Toast.LENGTH_LONG).show();
            }

            try {
                MainActivity.receiverHandler(context, msgs[0].getOriginatingAddress(), strMsgBody);
            }
            catch (Exception ex)
            {
                Toast.makeText(context, ex.toString(),
                        Toast.LENGTH_LONG).show();
            }
        }
    }

}

当我运行上面的代码时,它说使用或覆盖了已弃用的API,并使用-Xlint:deprecation重新编译以获取详细信息

第29行有此注释:: 方法调用“ getString”可能会产生“ NullPointerException”

,这里有android建议:

  

检查信息:此检查分析方法控制和数据流   报告可能始终为真或假的条件,   其值被静态证明为常数的表达式,以及   可能导致合同无效的情况。   变量,方法参数和返回值标记为@Nullable或   @NotNull被视为可为空(或分别为非空)并使用   在分析过程中检查可废除合同,例如报告   可能会产生NullPointerException(NPE)错误。更复杂   可以使用@Contract注释定义合同,例如:   @Contract(“ ,null-> null”)—如果方法第二秒返回null   参数为null @Contract(“ ,null-> null; _,!null->!null”)—   如果其第二个参数为null,则返回null   否则@Contract(“ true-> fail”)—典型的assertFalse方法   如果将true传递给它,则抛出异常检查可以   配置为使用自定义@Nullable

没有人可以帮助我!

0 个答案:

没有答案