如何从另一个活动访问变量

时间:2014-08-11 11:34:13

标签: java android logcat

所以我试图在我的Locator活动中从我的主要活动中访问一个字符串,如果我尝试将String实例化为公共静态,它会抛出一个错误并说我不能在非静态类中声明一个静态字符串,当我试图通过意图得到它我得到一个错误,说。[编辑]现在我已经能够访问意图而没有错误现在我得到一个NullPointerException

No Activity found to handle Intent { (has extras) }

这是我的主要活动代码:

options = (Spinner) findViewById(R.id.optionselect);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.options, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        options.setAdapter(adapter);
        String XxXSelect =options.getSelectedItem().toString();
         Intent i = new Intent(MainActivity.this,Locator.class);
    i.putExtra("XxXchoice",XxXSelect);
    startActivity(i);

我的定位器活动代码:

行 - &gt; 204 String XxXChoicei = getIntent().getStringExtra("XxXchoice");

完整的logcat

Caused by: java.lang.NullPointerException
            at com.example.adrian.trucktracker.Locator.Updater(Locator.java:204)
            at com.example.adrian.trucktracker.Locator.clickedUpdate(Locator.java:265)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3860)
            at android.view.View.performClick(View.java:4480)
            at android.view.View$PerformClick.run(View.java:18686)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:157)
            at android.app.ActivityThread.main(ActivityThread.java:5872)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)

4 个答案:

答案 0 :(得分:3)

你需要静态变量来在Application Class中声明全局变量,

所以将您的代码更改为:

class GlobalClass extends Application {

  public static String myVal;

}

然后,当您需要访问此数据时,请通过以下方式获取Application对象:

GlobalClass global=(GlobalClass)context.getApplication();
global.myVal="anything";

并且不要忘记将其添加到AndroidManifest.xml文件

<application
        android:name="packagename.GlobalClass"
        ....
        ....
        //other codes here
</application>

答案 1 :(得分:2)

试试这个

 Intent i = new Intent(Youractivity.this, locator.class);
 Bundle b = new Bundle();
 b.putString("XxXchoice", XxXSelect);
 i.putExtras(b);
 startActivity(i);

有关详细信息,请转到#Intent

答案 2 :(得分:0)

更改代码以摆脱Bundle

Intent i = new Intent(MainActivity.this, Locator.class);
i.putExtra("XxXchoice", XxXSelect);
startActivity(i);

然后在Locator类中执行此操作...

String XxXChoicei = getIntent().getStringExtra("XxXchoice");

您通过向Bundle添加一个exta Intent来复杂化,Bundle已经能够携带{{1}}个。{/ p>

答案 3 :(得分:-1)

如果您想使用意图,可以使用M D答案。如果你想从Main Activity.java访问String,你可以这样做

in your **MainActivity**

//declare a method
public static String getString() {

   String result;        

   // assign value to string here
     result = "your assingment"

     return result;
}

并在您的另一项活动中

//get value like this

  String string = MainActivity.getString();

这种方式用于在需要时访问变量。