2016-04-25 6 views
0

Ich versuche, JSON von einer URL in einer Android-App zu laden (die URL nur Links zu JSON-Daten, gibt es nichts anderes). Momentan versuche ich nur den Inhalt der URL in einen String zu laden.Der Versuch, JSON von einer URL zu laden und nicht zu wissen, wie man mit Ausnahmen behandelt

Das Problem, das ich habe, ist, dass ich die Ausnahmen behandeln muss, aber ich bin nicht damit vertraut.

Hier ist der relevante Teil meiner Klasse 'Funktionen':

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; 

} 

Dies ist, was ich zur Zeit mit (in einer anderen Klasse) zu Testzwecken:

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

I‘ Ich plane, die Ausgabe zu verwenden, um JSON-Daten für if-Anweisungen zu extrahieren, in sharedPreferences zu speichern und anzuzeigen.

EDIT

Hier ist, was ich verwende die Methode aufzurufen:

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

} 
} 

Der Try-Block wurde gerade hinzugefügt, nachdem sie durch die Antworten zu lesen. Ein weiterer wurde in meiner loadURL-Methode hinzugefügt. Es scheint für jetzt zu funktionieren.

Ich bekomme jetzt Fehler, weil ich versuchte, dies auf dem Hauptthread auszuführen. Ich muss mehr darüber lesen.

Antwort

1

Setzen Sie Ihren Code in try-Block und fängt die Ausnahme:

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

Danke, aber das löst nur einen Teil des Problems. Wo ich versuche, die Funktion aufzurufen, bekomme ich immer noch einen Fehler, der mir sagt, dass ich mit Ausnahmen umgehen soll. –

+0

Können Sie den Code von wo Sie die Methode aufrufen? –

+0

Sie müssen versuchen, versuchen fangen .. dort auch –

0

Zuerst gehen Sie durch den Grund JSON-Format. Grundsätzlich gibt es zwei Dinge zu sehen:

  1. JSONObject
  2. JSONArray

Sobald Sie mit diesen beiden vertraut sind, versuchen, die Antwort Parsen mit:

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

Können sagen, Ihre json war:

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

Der Code sollte somehting wie folgt aussehen:

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(); 
} 

Bitte gehen Sie durch Android DOKU: http://developer.android.com/reference/org/json/JSONObject.html

Und einige Beispiele wie: http://www.tutorialspoint.com/android/android_json_parser.htm

Ich hoffe, das hilft.