【问题标题】:array values cannot be access outside onCreate() method数组值不能在 onCreate() 方法之外访问
【发布时间】:2011-08-14 09:27:33
【问题描述】:

嗨,我正在将字符串数组从活动 A 传递到活动 B。在活动 B 中,我能够在 OnCreate() 方法中获取此字符串数组。但如果我在 onCreate( ) 方法,但在相同的活动 B 中,则此数组显示空值。我将数组声明为全局数组。

请告诉我如何在 onCreate() 方法之外但在同一个活动中访问这个数组到一个单独的类中......

这是活动 A

公共类 mymap 扩展 Activity { /** 在第一次创建活动时调用。 */

public  static  String arr[]={"40.748963847316034","-73.96807193756104" ,"United Nations",
    "40.76866299974387","-73.98268461227417","Lincoln Center",
    "40.765136435316755","-73.97989511489868","Carnegie Hall",
    "40.70686417491799","-74.01572942733765","The Downtown Club",
    "1.352566007"," 103.78921587","Singapore",
    "12.971598","77.594562","Bangalore"};
public  static  String animatel[]={"12.971598","77.594562"};

公共静态 int[] 图标 = { R.drawable.drinkingfountain, R.drawable.pin, R.drawable.helicopter, R.drawable.levelcrossing, R.drawable.ter, R.drawable.templehindu

};

public static int[] Icons1 = { R.drawable.icon, R.drawable.pin, R.drawable.f_icon, R.drawable.icon, R.drawable.pin, R.drawable.f_icon

};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Intent intent = new Intent(mymap.this,test.class);
    intent.putExtra("ll",arr );
    intent.putExtra("markers",Icons );
    intent.putExtra("images",Icons1 );
    intent.putExtra("anill", animatel);
    startActivity(intent);
}

}

这是活动 B

公共类 mapll 扩展 MapActivity { 私人地图视图地图=空; 私人我的位置覆盖我=空; 公共静态地理点 p; 公共静态字符串 [] arr; 公共静态 ArrayList 图标; 公共静态 ArrayList Icons1; public static Drawable marker1;

公共静态 ArrayList arrtp = new ArrayList(); 公共静态 ArrayList Iconstp = new ArrayList(); 公共静态 ArrayList Icons1tp = new ArrayList(); 公共静态 ArrayList tp = new ArrayList();

String[] 动画; @覆盖 公共无效 onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); 设置内容视图(R.layout.main); Log.d("prabhu","在 ocreate mapll 内部"); arr = getIntent().getStringArrayExtra("ll"); // for(int i=0;i map=(MapView)findViewById(R.id.map);

//map.getController().setCenter(getPoint("40.76793169992044","-73.98180484771729"));
map.getController().setZoom(5);
map.setBuiltInZoomControls(true);


Drawable marker=getResources().getDrawable(R.drawable.pin);

marker.setBounds(0, 0, marker.getIntrinsicWidth(),
marker.getIntrinsicHeight());

me=new MyLocationOverlay(this, map);
map.getOverlays().add(me);
map.getOverlays().add(new SitesOverlay(marker));
map.setSatellite(true);

map.getController().animateTo(getPoint(mymap.animatel[0],mymap.animatel[1]));


}

@Override
public void onResume() {
super.onResume();

me.enableCompass();
}

@Override
public void onPause() {
super.onPause();

me.disableCompass();
}

  @Override
protected boolean isRouteDisplayed() {
return(false);
}

  @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_S) {
map.setSatellite(!map.isSatellite());
return(true);
}
else if (keyCode == KeyEvent.KEYCODE_Z) {
map.displayZoomControls(true);
return(true);
}

return(super.onKeyDown(keyCode, event));
}

private GeoPoint getPoint(String arr, String arr2) {
    double lat = Double.parseDouble(arr);
    double lon = Double.parseDouble(arr2);
return(new GeoPoint((int)(lat*1E6),
(int)(lon*1E6)));
}

class SitesOverlay extends ItemizedOverlay<OverlayItem> {

    private List<OverlayItem> items=new ArrayList<OverlayItem>();
    //private Drawable pin=null;
    OverlayItem pi=null;
    public SitesOverlay(Drawable marker) {
    super(marker);
    Log.d("prabhu","Inside the ");
    //this.pin=marker;

// Icons1= getIntent().getExtras().getIntArray("images"); // Icons= getIntent().getExtras().getIntArray("markers"); // arr = getIntent().getExtras().getStringArray("ll"); boundCenterBottom(标记);

    Log.d("prabhu","arr len  "+arr.length);
    for(int i=0;i<mapll.arr.length;i=i+3)
    {

        String add = "";
         Geocoder geoCoder = new Geocoder(

                 getApplicationContext(), Locale.getDefault());
             try {
                //Log.d("prabhu","in try");
                mapll.p= getPoint(mymap.arr[i],mymap.arr[i+1]);
                 List<Address> addresses = geoCoder.getFromLocation(
                        mapll.p.getLatitudeE6()  / 1E6, 
                       mapll.  p.getLongitudeE6() / 1E6, 1);

                 if (addresses.size() > 0) 
                 {

                    Log.d("prabhu","in try");
                     for (int k=0; k<addresses.get(0).getMaxAddressLineIndex(); 
                          k++)

                      add += addresses.get(0).getAddressLine(k) + "\n";
                 Log.d("prabhu","address"+add);
                 }

                 //Toast.makeText(getBaseContext(), add, Toast.LENGTH_SHORT).show();
             }
             catch (IOException e) {  
                   Log.d("prabhu","exception occured");
                 e.printStackTrace();
             }   

// map.getController().animateTo(p); items.add(new OverlayItem(getPoint(mymap.arr[i],mymap.arr[i+1]),"",add));

             add = "";
    }

    for(int m=0;m<mymap.Icons.length;m++){
        mapll. marker1=getResources().getDrawable(mymap.Icons[m]);

        mapll.marker1.setBounds(0, 0,mapll. marker1.getIntrinsicWidth(),
        mapll.marker1.getIntrinsicHeight());
        items.get(m).setMarker(mapll.marker1);
        boundCenterBottom(mapll.marker1);
    Log.d("prabhu","items      "+items.get(m));

    }

    }




    @Override
    protected OverlayItem createItem(int j) {
    return(items.get(j));
    }

    @Override
    protected boolean onTap(int j) {
    //Toast.makeText(NooYawk.this,items.get(j).getSnippet(),Toast.LENGTH_SHORT).show();
        Context mContext = getApplicationContext();
        Dialog dialog = new Dialog(mapll.this);

        dialog.setContentView(R.layout.dialog);
        //dialog.setTitle("Custom Dialog");

        TextView text = (TextView) dialog.findViewById(R.id.text);
        text.setText(items.get(j).getSnippet());

        ImageView image = (ImageView) dialog.findViewById(R.id.image);

        image.setBackgroundResource(mymap.Icons1[j]);
        dialog.show();
        dialog.setCanceledOnTouchOutside(true);

        return true;


    }

    @Override
    public int size() {
    return(items.size());
    }
    private GeoPoint getPoint(String arr, String arr2) {
        double lat = Double.parseDouble(arr);
        double lon = Double.parseDouble(arr2);
    return(new GeoPoint((int)(lat*1E6),
    (int)(lon*1E6)));
    }
}



}

我收到此错误:FATAL EXCEPTION: main

错误/AndroidRuntime(15822): java.lang.NoClassDefFoundError:

错误/dalvikvm(15822):找不到类 'com.prabhu.android.mapll',引用自方法 com.prabhu.android.mymap.onCreate 错误/AndroidRuntime(15822):致命异常:主要 错误/AndroidRuntime(15822):java.lang.NoClassDefFoundError:com.prabhu.android.mapll 错误/AndroidRuntime(15822):在 com.prabhu.android.mymap.onCreate(mymap.java:49) 错误/AndroidRuntime(15822):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 错误/AndroidRuntime(15822):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2633) 错误/AndroidRuntime(15822):在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2685) 04-28 10:28:26.337: 错误/AndroidRuntime(15822): 在 android.app.ActivityThread.access$2300(ActivityThread.java:126) 04-28 10:28:26.337: 错误/AndroidRuntime(15822): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2038) 04-28 10:28:26.337: 错误/AndroidRuntime(15822): 在 android.os.Handler.dispatchMessage(Handler.java:99) 04-28 10:28:26.337: 错误/AndroidRuntime(15822): 在 android.os.Looper.loop(Looper.java:123) 04-28 10:28:26.337: 错误/AndroidRuntime(15822): 在 android.app.ActivityThread.main(ActivityThread.java:4633) 04-28 10:28:26.337: 错误/AndroidRuntime(15822): 在 java.lang.reflect.Method.invokeNative(Native Method) 04-28 10:28:26.337: 错误/AndroidRuntime(15822): 在 java.lang.reflect.Method.invoke(Method.java:521) 04-28 10:28:26.337: 错误/AndroidRuntime(15822): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 04-28 10:28:26.337: 错误/AndroidRuntime(15822): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 04-28 10:28:26.337: ERROR/AndroidRuntime(15822): at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 你在哪里使用数组?
  • 告诉我你的代码...我可以帮助你.....

标签: android android-activity


【解决方案1】:

在您的 Activity B 中创建一个 String 数组(比如 strArray 变量),同时来自第一个 Activity A,在 onCreate()Activity B 方法中

strArray = getIntent().getStringArrayExtra("GiveMeArray");

现在您可以在单独的类中但在同一个Activity

中使用您的数组

编辑:

在您的班级mymap 中定义Intent

Intent intent = new Intent(mymap.this,test.class); //  <<< what is test.class
intent.putExtra("ll",arr );

什么是test.class,而你的Activity Bmapll

【讨论】:

  • 那么我们需要您的代码 sn-p。第二次你的表现如何Activity
  • 嗨,阿迪尔,我在这里添加了我的代码。请检查它并帮助我解决这个问题
【解决方案2】:

如果您将其设为public static,则可以从任何地方访问它。如果多个活动需要访问它,您可能希望将它放在一个中心实用程序类中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多