2016-04-25 54 views
0

我試圖從Android應用中的URL加載JSON(該URL只鏈接到JSON數據,除此之外沒有其他)。 現在我只是試圖將URL的內容加載到字符串中。試圖從URL加載JSON並且不知道如何處理異常

我遇到的問題是我需要處理例外情況,但我對此不太瞭解。

這裏是我的「功能」類的相關部分:

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; 

} 

這是我目前使用(在不同的類)用於測試目的:

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

我m計劃使用輸出來提取if語句的JSON數據,保存在sharedPreferences中並顯示。

編輯

這裏我使用調用的方法是什麼:

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

} 
} 

的試塊通過回答看完之後剛添加。另一個是在我的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"] 
} 

您的代碼應服用點是這樣的:

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

請通過Android的DOCS:http://developer.android.com/reference/org/json/JSONObject.html

而像一些例子:我http://www.tutorialspoint.com/android/android_json_parser.htm

希望這有助於。