我可以使用两个微调器从我命名为 dist.js 的 javascript 文件中检索数据吗

Posted

技术标签:

【中文标题】我可以使用两个微调器从我命名为 dist.js 的 javascript 文件中检索数据吗【英文标题】:Can I use two spinners to retrieve data from a javascript file that i have named dist.js 【发布时间】:2012-10-09 09:27:26 【问题描述】:

我想要实现的是使用微调器从城镇中选择,然后到城镇,然后检索我在 dist.js 文件中定义的旅行距离和时间。当我在 webview 中使用 html 时效果很好。但我不想使用 webview。因此,我怎样才能让两个微调器来计算呢?


好的,已经尝试过,但仍然没有任何效果。到目前为止,这是我的代码。你能告诉我我做错了什么吗?

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;

import org.json.JSONArray;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity  extends Activity 

Spinner s1; 
Spinner s2; 

@Override 
public void onCreate(Bundle savedInstanceState)  
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 


s1  = (Spinner) findViewById(R.id.spinner1);
s2  = (Spinner) findViewById(R.id.spinner2);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.camp_sites, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(adapter);
InputStream is = context.getResources().openRawResource(R.raw.dist); 
Writer writer = new StringWriter(is.available()); 
char[] buffer = new char[1024]; 
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
try  
    int n; 
    while ((n = reader.read(buffer)) != -1)  
        writer.write(buffer, 0, n); 
     
 finally  
    reader.close(); 
 
String jsonString = writer.toString(); 

JSONArray json = new JSONArray(jsonString);



public void onNothingSelected(AdapterView<?> parent) 

   

谢谢你帮我解决这个问题!!!

【问题讨论】:

【参考方案1】:

加载 js 文件,获取城镇名称数组,并将它们放入 ArrayAdapter。然后将适配器传递给您的微调器:

spinner.setAdapter(adapter);

对你的两个微调器中的每一个执行一次。

有关微调器的更多信息:http://developer.android.com/guide/topics/ui/controls/spinner.html

更新

要加载 js 文件(我假设它包含一个 JSON 数组),您可以将其放入 resources/raw 并执行以下操作:

// open the input stream
InputStream is = context.getResources().openRawResource(R.raw.dist);

// read into a buffer
// NOTE: This is ugly, and there may be a better way, but it works.
Writer writer = new StringWriter(is.available());
char[] buffer = new char[1024];
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
try 
    int n;
    while ((n = reader.read(buffer)) != -1) 
        writer.write(buffer, 0, n);
    
 finally 
    reader.close();

String jsonString = writer.toString();

// load into a JSONArray
// if your file contains a single object, use JSONObject instead
JSONArray json = new JSONArray(jsonString);

如果你的 json 文件真的很大,有一种方法可以将流解析为 JSON,而无需先读取整个文件,但它更复杂。为此,我推荐Jackson,并且确实可以满足您的所有 JSON 需求。 Gson 是另一种选择。

【讨论】:

感谢您的回复。你能指出我加载 .js 文件的正确方向吗?我是否将 .js 文件放在 assests 文件夹中? 我似乎在 InputStream is = context.getResoures().open...... 不是 100% 确定这意味着什么。 您需要一个Context 对象。 Activity 子类上下文,因此您可以从片段中调用getActivity(),或者您可以将您的活动的引用传递给您的视图或运行此代码的任何位置。

以上是关于我可以使用两个微调器从我命名为 dist.js 的 javascript 文件中检索数据吗的主要内容,如果未能解决你的问题,请参考以下文章

使用微调器从自定义列表视图中删除了错误的行

Android微调器中的重复项目

如何从我的EditText获取具有格式化日期的日期对象(通过微调器存储)

在 JAVA 中使用 SAX 解析器从 XML 文件中提取文本节点

普通人如何做到“我命由我不由天”

通过类加载器从 dex 文件中访问 app 的类