2016-04-25 6 views
0

AndroidアプリケーションのURLからJSONをロードしようとしています(URLはJSONデータにしかリンクしていません。 今のところ私はURLの内容をStringにロードしようとしています。URLからJSONをロードしようとしていて、例外の処理方法がわからない

私が持っている問題は、例外を処理する必要があることですが、私はそれにあまり慣れていません。私は「

Toast.makeText(Setup.this, Functions.loadURL("http://www.exampleJSON.com"), Toast.LENGTH_LONG).show(); 

:これはテスト目的のために(別のクラスに)私は現在使用しているものです

static public String loadURL(String inputURL) throws Exception { 

    String fullString = ""; 
    URL url = new URL(inputURL); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     fullString += line; 
    } 
    reader.close(); 

    return fullString; 

} 

:ここ

は私の「機能」クラスの関連する部分でありますm出力を使用してif文のJSONデータを抽出し、sharedPreferencesに保存して表示することを計画します。

EDITここ

私はメソッドを呼び出すために使用しています何:

public class Setup extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_setup); 

    final SharedPreferences preferences = this.getPreferences(Context.MODE_PRIVATE); 
    final SharedPreferences.Editor editor = preferences.edit(); 

    final Spinner spinner = (Spinner) findViewById(R.id.spinner); 

    final EditText editText = (EditText) findViewById(R.id.editText); 


    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
      R.array.setup_region_spinner, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(this); 

    //BUTTON PRESS 

    Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      editor.putString("Server", String.valueOf(spinner.getSelectedItem())); 

      if (String.valueOf(spinner.getSelectedItem()).equals("EUW")) { 

      } 

      else if (String.valueOf(spinner.getSelectedItem()).equals("NA")) { 

       try { 
        Toast.makeText(Setup.this, Functions.loadURL("https://na.api.pvp.net/api/lol/na/v1.4/summoner/by-name/" + 
          editText.getText().toString().replaceAll("\\s", "") + 
          "?api_key=cbc50791-3c4d-45e6-b0c1-8aa204ced475"), Toast.LENGTH_LONG).show(); 
       }catch(Exception e){ 
        e.printStackTrace(); 
       } 

      } 

      //ERROR 

      else { 

       Toast.makeText(Setup.this, "Server selection error", Toast.LENGTH_SHORT).show(); 

      } 

     } 
    }); 
} 


@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
} 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 

} 
} 

のtryブロックは、単に答えを読ん後に追加されました。別のものが私のloadURLメソッドに追加されました。今のところうまくいくようです。

これはメインスレッドで実行しようとしていたため、エラーが発生しています。私はそれについてもっと読む必要があります。

答えて

1

は、tryブロック内のコードを入れて、例外をキャッチ:

try { 
String fullString = ""; 
    URL url = new URL(inputURL); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     fullString += line; 
    } 
    reader.close(); 

    return fullString; 
} catch(Exception ex) { 
ex.printStackTrace(); 
} 
return null; 
+0

ありがとうございますが、それは問題の一部のみを解決します。私が関数を呼び出そうとしているところでは、例外を処理するように指示するエラーが表示されます。 –

+0

メソッドを呼び出す場所からコードを表示できますか? –

+0

try catchを使う必要があるかもしれません.. –

0

まず、基本的なJSON形式を経ます。あなたはこれらの二つに慣れているしたら、使用して応答を解析してみてください

  1. JSONObject
  2. JSONArray

を::

try{ 
    JSONObject jsonObject = new JSONObject(<your_response_string_here>); 
    //Your parsing logic here 
}catch(JSONException ex){ 
    ex.printStackTrace(); 
} 

はあなたの言うことができます見て二つのことは基本的にあります。 jsonは:

{ 
    "some_status": 200, 
    "my_data": { 
     "param1": "value1", 
     "param2": "value2" 
    }, 
    "my_array": ["arrayvalue1", "arrayvalue2"] 
} 

あなたのコードは次のようsomehtingになります:

try{ 
    JSONObject jsonObject = new JSONObject(<your_response_string_here>); 
    //Your parsing logic here 
    int status = jsonObject.optString("some_status"); 
    JSONObject my_data = jsonObject.optJSONObject("my_data"); 
    //Here parse your "my_data" object to get "param1" and "param2" 
    JSONArray my_array = jsonObject.optJSONArray("my_array"); 
    //Here parse your "my_array" array to get "arrayvalue1" and "arrayvalue2" 
}catch(JSONException ex){ 
    ex.printStackTrace(); 
} 

をアンドロイドDOCSを通過してください:http://developer.android.com/reference/org/json/JSONObject.html

などいくつかの例:http://www.tutorialspoint.com/android/android_json_parser.htm

私はこのことができます願っています。

関連する問題