为什么不能在类中设置String却可以获取String?

时间:2018-07-30 23:26:59

标签: java android android-studio oop getter-setter

我的问题包括一个Activity和一个RecyclerViewAdapter。 我想将Uri的Stringvalue从我的Activity传递到我的RecyclerViewAdapter。 为了通过,我使用了这个 Getter and Setter 类:

updateDataAdapter.java

public class updateDataAdapter {

public String testurl;

public String getTesturl() {
    return testurl;
}
public void setTesturl(String testurl) {
    this.testurl = testurl;
  }
}

Recyclerview发送一个((Activity) context).startActivityForResult();的意图,而Activity使用onActivityResult来接收intent和RequestCode。

来自Recyclerview .java的代码:

Intent intent = new Intent();

intent.setType("image/*");

intent.setAction(Intent.ACTION_GET_CONTENT);

((Activity) context).startActivityForResult(Intent.createChooser(intent, "Select Image From Gallery"), 1);

ContextActivity(在设置适配器时作为参数提供)。

onActivityResultActivty的代码:

 @Override
public void onActivityResult(int RC, int RQC, Intent I) {

    super.onActivityResult(RC, RQC, I);


    if (RC == 1 && RQC == RESULT_OK && I != null && I.getData() != null) {

        Uri uri2 = I.getData();

        updateDataAdapter  updateDataAdapter = new updateDataAdapter();

        try { 
            updateDataAdapter.setTesturl(String.ValueOf(uri2));
        }
        catch(IOException e){
            e.printStackTrace();
       }}
      }

问题:

如果我在getTesturl中调用RecyclerViewAdapter,则字符串为空。

这就是为什么我尝试其他方法来定位问题的原因。

首先,我在updateDataAdapter.java中将public String testurl;设置为public String testurl = "This is my text";,并呼叫getTesturl收到文本“这是我的文本”

所以我可以断定问题是setTesturl

所以我尝试将updateDataAdapter.setTesturl(String.ValueOf(uri2));替换为updateDataAdapter.setTesturl("This is my text");

但是在这种情况下,字符串为空。

我该如何解决该问题,为什么我的代码无法正常工作?

请帮助我。

2 个答案:

答案 0 :(得分:0)

 if (RC == 1 && RQC == RESULT_OK && I != null && I.getData() != null) {

    Uri uri2 = I.getData();

    updateDataAdapter  updateDataAdapter = new updateDataAdapter();

    try { 
        updateDataAdapter.setTesturl(String.ValueOf(uri2));
    }
    catch(IOException e){
        e.printStackTrace();
   }}
  }

在这里您创建一个新的updateDataAdapter。将新创建的updateDataAdapter替换为现有的RecyclerViewAdapter

答案 1 :(得分:0)

“ updateDataAdapter”应声明类成员变量。

private updateDataAdapter  updateDataAdapter = new updateDataAdapter();

@Override
public void onActivityResult(int RC, int RQC, Intent I) {

    super.onActivityResult(RC, RQC, I);


    if (RC == 1 && RQC == RESULT_OK && I != null && I.getData() != null) {

        Uri uri2 = I.getData();

        try { 
            updateDataAdapter.setTesturl(String.ValueOf(uri2));
        }
        catch(IOException e){
            e.printStackTrace();
       }}
      }