java.lang.OutOfMemoryError:尝试抛出OutOfMemoryError时抛出OutOfMemoryError;没有可用的堆栈跟踪

2024-02-29

我正在尝试将用户提供的经纬度值与数据库中的经纬度值进行比较。如果它们彼此相距 15 公里半径,则应更改文本视图。 但我面临以下错误,

我的数据库包含值 source lat = 19.218418 source long = 73.08661 经度 = 18.9766017 经度 = 72.8326658。用户提供的值是 源纬度 = 19.2213935 源长 = 73.081532 des lat = 18.9632933 des 长 = 72.8324848。

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.hitesh.nearby, PID: 2156
              java.lang.IllegalStateException: Could not execute method for android:onClick
                  at android.view.View$DeclaredOnClickListener.onClick(View.java:5347)
                  at android.view.View.performClick(View.java:6267)
                  at android.view.View$PerformClick.run(View.java:24763)
                  at android.os.Handler.handleCallback(Handler.java:789)
                  at android.os.Handler.dispatchMessage(Handler.java:98)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6548)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
               Caused by: java.lang.reflect.InvocationTargetException
                  at java.lang.reflect.Method.invoke(Native Method)
                  at android.view.View$DeclaredOnClickListener.onClick(View.java:5342)
                  at android.view.View.performClick(View.java:6267) 
                  at android.view.View$PerformClick.run(View.java:24763) 
                  at android.os.Handler.handleCallback(Handler.java:789) 
                  at android.os.Handler.dispatchMessage(Handler.java:98) 
                  at android.os.Looper.loop(Looper.java:164) 
                  at android.app.ActivityThread.main(ActivityThread.java:6548) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
               Caused by: java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack trace available

结果.java

public class result extends Activity {
DatabaseHelper myDb;

@Override
protected void onCreate(Bundle savedInstanceState) {
    myDb = new DatabaseHelper(this);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_result);
    String url = getIntent().getExtras().getString("username");
    String url1 = getIntent().getExtras().getString("username1");
    TextView tv= (TextView)findViewById(R.id.textView2);
    TextView tv1= (TextView)findViewById(R.id.textView5);


    String[] separated = url.split("_");
    String srclat = separated[0];
        Double dsrclat= Double.parseDouble(srclat);
    String srclng = separated[1];
        Double dsrclng= Double.parseDouble(srclng);

    String[] separated1 = url.split("_");
    String deslat = separated1[0];
         Double ddeslat= Double.parseDouble(deslat);
    String deslng = separated1[1];
         Double ddeslng= Double.parseDouble(deslng);

    tv.setText(url);
    tv1.setText(url1);

}

public void Database(View view){
    Intent intent = new Intent(result.this, feeder.class);
    startActivity(intent);
}


public void NearestValue(View view){


    TextView tv= (TextView)findViewById(R.id.textView2);
    String s1 = tv.getText().toString();
    String[] separated = s1.split("_");
    String deslat = separated[0];
    Double Lat= Double.parseDouble(deslat);
    String deslng = separated[1];
    Double Lng= Double.parseDouble(deslng);
    ArrayList<String> ssList = new ArrayList<>();
    ssList = myDb.countDatabase(Lat,Lng);
    int ssize = ssList.size();
    TextView tvvv = (TextView) findViewById(R.id.textView8);
    for(int i=0;i<ssize;i++) {
        tvvv.setText(ssList.get(i));
    }

    TextView tv1= (TextView)findViewById(R.id.textView5);
    String s11 = tv1.getText().toString();
    String[] separated1 = s11.split("_");
    String deslat1 = separated1[0];
    Double Lat1= Double.parseDouble(deslat1);
    String deslng1 = separated1[1];
    Double Lng1= Double.parseDouble(deslng1);
    ArrayList<String> ddList = new ArrayList<>();
    ddList = myDb.countDatabase1(Lat1,Lng1);
    int dsize = ddList.size();
    TextView tvvvv = (TextView) findViewById(R.id.textView9);
    for(int i=0;i<dsize;i++) {
        tvvv.setText(ddList.get(i));
    }

        for(int i=0;i<ssize;i++){
            String source = ssList.get(i);
            for(int j=0;j<dsize;j++) {
                String destination = ddList.get(j);
                String src = myDb.findBus(source, destination);

                    TextView tvv = (TextView) findViewById(R.id.textView7);
                    tvv.setText(src);

            }

        }

    }

}

数据库助手

    public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "Nearby.db";
    public static final String TABLE_NAME = "halt_details";
    public static final String COL_2 = "snme";
    public static final String COL_3 = "slati";
    public static final String COL_4 = "slong";
    public static final String COL_5 = "dnme";
    public static final String COL_6 = "dlati";
    public static final String COL_7 = "dlong";
    public static final String COL_8 = "buses";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + "(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, snme VARCHAR, slati DOUBLE, slong DOUBLE, dnme VARCHAR, dlati DOUBLE, dlong DOUBLE, buses VARCHAR)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }

    public void insertData(String sname, Double slat, Double slng, String dname, Double dlat, Double dlng, String bus) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("snme",sname);
        contentValues.put("slati",slat);
        contentValues.put("slong",slng);
        contentValues.put("dnme",dname);
        contentValues.put("dlati",dlat);
        contentValues.put("dlong",dlng);
        contentValues.put("buses",bus);

        db.insert(TABLE_NAME,null ,contentValues);
    }

    public void clearDatabase() {
        SQLiteDatabase db = this.getWritableDatabase();
        String clearDBQuery = "DELETE FROM "+TABLE_NAME;
        db.execSQL(clearDBQuery);
    }

    public ArrayList<String> countDatabase(Double LAT, Double LNG) {
        String sourcename=null;
        double earthRadius = 6371.75;
        ArrayList<String> sList = new ArrayList<>();
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor mCount= db.rawQuery("SELECT * FROM " + DatabaseHelper.TABLE_NAME + " WHERE " + DatabaseHelper.COL_3 + " BETWEEN (" +LAT+"- 0.1) AND ("+LAT+" + 0.1) AND " + DatabaseHelper.COL_4 + " BETWEEN (" +LNG+"- 0.1) AND ("+LNG+" + 0.1)", null);
        mCount.moveToNext();
        while (mCount.moveToFirst()) {
            double Latitude = mCount.getDouble(2);
            double Longitude = mCount.getDouble(3);
            double dLat = Math.toRadians(Latitude-LAT);
            double dLng = Math.toRadians(Longitude-LNG);
            double sindLat = Math.sin(dLat / 2);
            double sindLng = Math.sin(dLng / 2);
            double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2) * Math.cos(Math.toRadians(LAT)) * Math.cos(Math.toRadians(Latitude));
            double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
            double dist = earthRadius * c;
            if (dist<15){
                sourcename=mCount.getString(1);
                sList.add(sourcename);
            }
        }
        mCount.close();
       return sList;
    }

    public ArrayList<String> countDatabase1(Double LAT, Double LNG) {
        String destinationname=null;
        ArrayList<String> dList = new ArrayList<>();
        double earthRadius = 6371.75;
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor mCount= db.rawQuery("SELECT * FROM " + DatabaseHelper.TABLE_NAME + " WHERE " + DatabaseHelper.COL_3 + " BETWEEN (" +LAT+"- 0.1) AND ("+LAT+" + 0.1) AND " + DatabaseHelper.COL_4 + " BETWEEN (" +LNG+"- 0.1) AND ("+LNG+" + 0.1)", null);
        mCount.moveToFirst();
        while (mCount.moveToNext() ) {
            double Latitude = mCount.getDouble(2);
            double Longitude = mCount.getDouble(3);
            double dLat = Math.toRadians(Latitude-LAT);
            double dLng = Math.toRadians(Longitude-LNG);
            double sindLat = Math.sin(dLat / 2);
            double sindLng = Math.sin(dLng / 2);
            double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2) * Math.cos(Math.toRadians(LAT)) * Math.cos(Math.toRadians(Latitude));
            double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
            double dist = earthRadius * c;
            if (dist<15){
                destinationname = mCount.getString(4);
                dList.add(destinationname);
            }
        }
        mCount.close();
        return dList;
    }

    public String findBus(String sourcename, String desname){
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor mCount= db.rawQuery("select count(*) from search_table where name='" + sourcename + "' AND dname='"+desname+"'", null);
        mCount.moveToFirst();
        String src= mCount.getString(1);
        mCount.close();
         return src;
    }


    public Cursor getAllData() {
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor res = db.rawQuery("select * from " + TABLE_NAME, null);
        return res;
    }
}

我建议您在以下问题中遇到一些问题findBus方法和调用它的循环。

1. 不必要的循环

3 循环调用findBus方法似乎没用,因为他们反复设置TextView但只有最后一个可能是可见的并因此可用。您可以直接转到最后一个元素ArrayList是通过使用他们的size method.

我建议如下:-

tvvv.setText(ddList.get(ddList.size()-1));
TextView tvv = (TextView) findViewById(R.id.textView7);
tvv.setText(myDB.findBus(ssList.get(ssList.size()-1),ddList.get(ddList.size()-1)));

应该替换:-

for(int i=0;i<dsize;i++) {
    tvvv.setText(ddList.get(i));
}

    for(int i=0;i<ssize;i++){
        String source = ssList.get(i);
        for(int j=0;j<dsize;j++) {
            String destination = ddList.get(j);
            String src = myDb.findBus(source, destination);

                TextView tvv = (TextView) findViewById(R.id.textView7);
                tvv.setText(src);

        }

    }

}

2. 无效偏移量

此外,当查询仅返回 1 列时,在 findBus 方法中,您尝试访问从查询返回的第二列。即你已经编码了偏移量1而只是偏移0(柱子count(*)) 是唯一可用的列。

我建议改变findBus方法:-

public String findBus(String sourcename, String desname){
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor mCount= db.rawQuery("select count(*) from search_table where name='" + sourcename + "' AND dname='"+desname+"'", null);
    mCount.moveToFirst();
    String src= mCount.getString(0); //<<<< Changed offset to 0 from 1
    mCount.close();
    return src;
}

这可能会减少内存需求,但我不知道是否足够。但是,您可能还希望检查Related有关 OOM 的链接显示在右侧(内存不足错误,可能是带有(安卓)).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.OutOfMemoryError:尝试抛出OutOfMemoryError时抛出OutOfMemoryError;没有可用的堆栈跟踪 的相关文章

  • 在 SQLite 中搜索时排除 HTML 标签和一些 UNICODE 字符

    更新 4 我已经成功运行了firstchar例如 但现在的问题是使用regex 即使包含头文件 它也无法识别regex操作员 有什么线索可以解决这个问题吗 更新 2 我已经编译了sqlite3我的项目中的库 我现在正在寻找任何人帮助我为我的
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • Android 套接字和 asynctask

    我即将开始制作一个应该充当 tcp 聊天客户端的应用程序 我一直在阅读和阅读 我得出的结论是最好 如果不需要 将我的套接字和异步任务中的阅读器 问题是我不确定从哪里开始 因为我是 Android 新手 这至少对我来说是一项艰巨的任务 但据我
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将 Intent 包装在 LabeledIntent 中以用于显示目的

    要求 我的应用程序中有一个 共享 按钮 我需要通过 Facebook 分享 我需要选择是否安装原生 Facebook 应用程序 我们的决定是 如果未安装该应用程序 则将用户发送到 facebook com 进行分享 当前状态 我可以检测何时
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j
  • 强制 Listview 不重复使用视图(复选框)

    我做了一个定制Listview 没有覆盖getView 方法 Listview 中的每个项目都具有以下布局 联系布局 xml

随机推荐