Android “错误”;未处理的异常:java.io.IOException“;在MainActivity中使用OkHttp时
//Response=client.newCall(request.execute()上出现错误; 返回响应。body().string();//线 整个代码: ` 我应该在哪里写我输入的url地址?在OkHttp文档中,它仅为公共类显示。如果我在MainActivity中下载此代码,应在何处编写此代码:Android “错误”;未处理的异常:java.io.IOException“;在MainActivity中使用OkHttp时,android,ioexception,okhttp,main-activity,Android,Ioexception,Okhttp,Main Activity,//Response=client.newCall(request.execute()上出现错误; 返回响应。body().string();//线 整个代码: ` 我应该在哪里写我输入的url地址?在OkHttp文档中,它仅为公共类显示。如果我在MainActivity中下载此代码,应在何处编写此代码: publicstaticvoidmain(字符串[]args)引发IOException{ OkHttpexample OkHttpexample=新的OkHttpexample(); 字符串
publicstaticvoidmain(字符串[]args)引发IOException{
OkHttpexample OkHttpexample=新的OkHttpexample();
字符串响应=
okHttpexample.run(“https://raw.github.com/square/okhttp/master/README.md");
System.out.println(响应);}
如果您了解更多关于OkHttp的详细教程,它将非常有用您可能需要捕获
IOException
,尝试使用try/catch来包含您的HTTP调用
Try {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
} catch (IOException exception) {
}
执行此操作时,请从方法声明中删除抛出IOException
。以供参考:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new APIRequest().execute();
}
private class APIRequest extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
String response;
try {
// HTTP GET
GetExample example = new GetExample();
response = example.run("http://192.168.1.100/api/getsomething");
} catch (IOException e) {
response = e.toString();
}
return response;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// do something...
}
}
public class GetExample {
final OkHttpClient client = new OkHttpClient();
String run(String url) throws IOException {
try {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
} catch (Exception e) {
return e.toString();
}
}
}
}
public类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
新建APIRequest().execute();
}
私有类APIRequest扩展异步任务{
@凌驾
受保护的字符串背景(无效…无效){
字符串响应;
试一试{
//HTTP获取
GetExample=新的GetExample();
响应=示例。运行(“http://192.168.1.100/api/getsomething");
}捕获(IOE异常){
响应=e.toString();
}
返回响应;
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
//做点什么。。。
}
}
公共类GetExample{
最终OkHttpClient客户端=新的OkHttpClient();
字符串运行(字符串url)引发IOException{
试一试{
Request Request=newrequest.Builder()
.url(url)
.build();
Response=client.newCall(request.execute();
返回响应.body().string();
}捕获(例外e){
返回e.toString();
}
}
}
}
这是Java吗?它甚至还撒谎吗?你懂java吗?为什么你要把方法的主体放在另一个方法的主体里面?空捕获不需要,当然NOMTExceptionWow也不需要,真的吗?在抓捕中该做什么由他决定。。。你当然不应该让它空着。我不明白你所说的“NomteSeption”是什么意思。。你能说得更清楚一点吗?不是空的陷阱是让他问另一个关于NOMTE的恼人问题——android世界中最常见的例外,当noobs使用网络时我不是。。。当然不是。只适用于那些在询问之前太过保守而无法使用谷歌的人。。。Fx此代码来自您尝试在google中搜索okhttp时的第一个站点。。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new APIRequest().execute();
}
private class APIRequest extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... voids) {
String response;
try {
// HTTP GET
GetExample example = new GetExample();
response = example.run("http://192.168.1.100/api/getsomething");
} catch (IOException e) {
response = e.toString();
}
return response;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// do something...
}
}
public class GetExample {
final OkHttpClient client = new OkHttpClient();
String run(String url) throws IOException {
try {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
} catch (Exception e) {
return e.toString();
}
}
}
}