从java类回调一个字符串到活动?

时间:2017-09-18 12:35:53

标签: java android interface

如何从非活动java类中获取字符串!我使用接口将字符串从非活动java类发送到activity!

从这个类文件中我必须传递字符串Url。

public abstract class  CustomTabsURLSpan extends URLSpan implements Parcelable{

    String url;

    public CustomTabsURLSpan(String url) {
        super(url);
    }

    public void getLink(String url){
        this.url = url;
    }

    private OnSendUrl onSendUrl;

    public interface OnSendUrl{
        void singleUrl(String url);
    }

    @Override
    public void onClick(View widget) {
        Log.d("link",getURL()+"");
        url= getURL();
        onSendUrl.singleUrl(url); // throws null pointer Exception
    }

}

我需要在这里获取字符串 - >>>

public class MainActivity extends AppCompatActivity implements CustomTabsURLSpan.OnSendUrl{


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

    @Override
    public void singleUrl(String url) {
        Log.d("url",url);
    }

}

1 个答案:

答案 0 :(得分:1)

代码中的初始问题是onSendUrl未初始化。这使我们了解如何初始化它,这也可能引发另一个问题,即如何知道您分配给它的实例是否有效。 实现这一目标的一种简单方法是引入一个可以强制转换并分配给onSendUrl的变量。在我的简单实现中,我使用Context作为OnSendUrl接口的实现,并且您给出的用例也恰好是具有Context的Activity。我的简单实现如下所示:

public CustomTabsURLSpan(Context context,  String url) {
        super(url);
        this.context = context;
        if (context instanceof OnSendUrl) {
                mListener = (OnSendUrl) context;
            } else {
                throw new RuntimeException(context.toString()
                        + " must implement OnSendUrl");
            }
    }