2016-04-25 23 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

希望这有助于。