0

私が達成したいのは、スピナーを使用して町から町を選択し、dist.js ファイルで定義した移動距離と時間を取得することです。webviewでhtmlを使用するとうまく機能します。しかし、私はwebviewを使いたくありません。したがって、これを計算するために2つのスピナーを取得するにはどうすればよいですか?


試してみましたが、まだ何も機能しません。これまでの私のコードは次のとおりです。私が間違っていることを教えてもらえますか?

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) {

   }
}

この問題で私を助けてくれてありがとう!!!

4

1 に答える 1

0

js ファイルをロードし、町名の配列を取得して、それらをArrayAdapterに入れます。次に、アダプターをスピナーに渡します。

spinner.setAdapter(adapter);

2 つのスピナーのそれぞれについて、これを 1 回行います。

スピナーの詳細: 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は別のオプションです。

于 2012-10-18T20:23:31.263 に答える