【问题标题】:How to send the Clicked Item Latitude to javascript from MainActivity.java如何从 MainActivity.java 将 Clicked Item Latitude 发送到 javascript
【发布时间】:2016-12-22 16:38:29
【问题描述】:

这是我的 MainActivity.java

public class MainActivity extends AppCompatActivity{
 CountriesDbAdapter myDB = new CountriesDbAdapter(this);

ListView listView;
public String lat;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    myDB.open();
    myDB.deleteBank();
    myDB.insertBank();
    listView = (ListView) findViewById(R.id.listView);
                              toggleView();
    WebView webView = (WebView) this.findViewById(R.id.webView);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new WebViewJavaScriptInterface(this), "android");
    webView.requestFocusFromTouch();
    webView.setWebViewClient(new WebViewClient());
    webView.setWebChromeClient(new WebChromeClient());
    webView.loadUrl("file:///android_asset/www/bank.html");
}

public void toggleView() {

    final Cursor cursor = myDB.fetchBank();
    final String[] arr = new String[cursor.getCount()];
    int i = 0;

    if (cursor.moveToFirst()) {
        do {
            String data = cursor.getString(cursor.getColumnIndex("banks"));
            arr[i] = data;
            i++;

        } while (cursor.moveToNext());
    }


    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, arr);


    listView.setAdapter(adapter);
    final StringBuffer buffer = new StringBuffer();

    listView.setOnItemClickListener(new OnItemClickListener() {
                                        @Override
                                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                                            //Toast.makeText(MainActivity.this, arr[position], Toast.LENGTH_SHORT).show();

                                            Cursor res = myDB.answerRequest(arr[position]);

                                            if (res.moveToFirst()) {
                                                do {

                                                    lat=res.getString(2);
                                                   //buffer.append("lat: " + lat + "\n");
                                                  //  buffer.append("long: " + res.getString(3) + "\n\n");
                                                   // showMessage("Data", buffer.toString());
                                                    //showMessage();
                                                } while (res.moveToNext());
                                            }
                                        }


                                    });

}




class WebViewJavaScriptInterface {

    private Activity activity;

    public WebViewJavaScriptInterface(Activity activity) {
        this.activity = activity;
    }


   @JavascriptInterface
    public String getData() {
       //From Here how can i Return my Updated latitude to javascript file
   }

}

CountriesDbAdapter.java

package com.example.student.finalone;
public class CountriesDbAdapter {
public static final String COLUMN_BANK = "banks";
public static final String COLUMN_BANKL = "banksl";
public static final String COLUMN_BANKLG = "bankslg";
private static final String TAG = "CountriesDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
public static final String KEY_ROWID = "id";
private static final String DATABASE_NAME = "Vijayawada";
private static final String BANK_TABLE = "Bank";

private static final int DATABASE_VERSION = 1;
private final Context mCtx;
private static final String DATABASE_BANK = "CREATE TABLE if not exists " + BANK_TABLE + " (" + KEY_ROWID + " integer PRIMARY KEY autoincrement," + COLUMN_BANK + "," + COLUMN_BANKL + "," + COLUMN_BANKLG + ");";



private static class DatabaseHelper extends SQLiteOpenHelper {

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

    @Override
    public void onCreate(SQLiteDatabase db) {

        Log.w(TAG, DATABASE_BANK);
        db.execSQL(DATABASE_BANK);

    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS " + BANK_TABLE);

    }
    }
public CountriesDbAdapter(Context ctx) {
    this.mCtx = ctx;
}
public CountriesDbAdapter open() throws SQLException {
    mDbHelper = new DatabaseHelper(mCtx);
    mDb = mDbHelper.getWritableDatabase();
    return this;
}
public long createBank(String b, double blat,double blong) {
    ContentValues initialValues = new ContentValues();initialValues.put(COLUMN_BANK, b);initialValues.put(COLUMN_BANKL, blat);initialValues.put(COLUMN_BANKLG, blong);
    return mDb.insert(BANK_TABLE, null, initialValues);
}
public boolean deleteBank() {

    int doneDelete = 0;
    doneDelete = mDb.delete(BANK_TABLE, null , null);
    Log.w(TAG, Integer.toString(doneDelete));
    return doneDelete > 0;
}
public void insertBank()
{
    createBank("ServicebranchSBI",16.5109,80.651);createBank("StateBankofIndia",16.5011,80.6559);createBank("StateBankOfHyderabad",16.4966,80.6569);
    createBank("BankOfBaroda",16.4974,80.6546);createBank("AndhraBank",16.5028,80.6396);createBank("AndhraBank",16.5062,80.648);


}
public Cursor fetchBank() {
    String SelectQuery="select * from "+BANK_TABLE;
    Cursor mCursor = mDb.rawQuery(SelectQuery,null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;
}
public Cursor answerRequest(String position) {

    String SelectQuery= "SELECT * FROM " + BANK_TABLE + " WHERE " + COLUMN_BANK + "='" + position + "'";
    Cursor mCursor = mDb.rawQuery(SelectQuery,null);
   // String result="";
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;





}
}

index.html

<html>
<head>

<script>
    var showData = function() {
        var data = android.getData();
        window.alert("Hello! Data are: " + data + "; first = " + data);
    }

 </script>

 </head>

   <body>
   <p>Lorem ipsem dolor et ceteris.</p>

   <input type="button" value="Display data" onclick="showData()">
   </body>
   </html>

我试图从 MainActivity.java 访问数据库并将其推送到 html 文件,每当我单击 html 按钮时,它会显示 0,在某些情况下,我会在双纬度声明附近出现错误

【问题讨论】:

  • 代码不完整,我找不到a1dToJson变量
  • 我不明白你在这里要做什么,因为你没有为变量 'lat' 分配任何值,因为它给你 0.0
  • 您在该方法上所做的只是将侦听器分配给listView,但侦听器的代码只会在单击时执行。 main 方法总是返回 0,因为它没有给数组赋值。

标签: java android arrays static private


【解决方案1】:

您可以通过两种方式实现它:
1. 从OnItemClickListener 实现Activity 并覆盖onItemClick 平行于onCreate。定义双数组一个类变量并在onItemClick中更新它

public class MainActivity extends Activity implements OnItemClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          // Your code here
     }
}

2.创建一个类MyItemClickListener并从OnItemClickListener实现它。定义双数组一个类变量

class MyItemClickListener implements OnItemClickListener
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // Your code here

        //Update the class member a1dToJson(lat).toString();//Here it returns all 0's
    }
}

setOnItemClickListener 更改为:

listView.setOnItemClickListener(new MyItemClickListener());

【讨论】:

  • 我做了同样的事情并将 lat 声明为静态以在类外部访问,但它给了我一个错误,因为内部类不能有静态声明。
  • 不要通过内部类方法。试试我的建议
  • 你能给我举个例子吗
  • 我很困惑,如果你不介意我会发送我的活动文件,我是 android 新手,那么它可以让你更好地澄清我的要求,谢谢
  • 当然!发给我
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 2020-01-17
  • 1970-01-01
  • 2021-08-23
  • 2018-04-04
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多